awdfkewd @ 2024-12-07 18:37:01
#include<iostream>
#include<cstring>
using namespace std;
char map[1000][1000];
int t,n,m,k,x,y,d,ans;
int ax,ay;
int main(){
cin>>t;
for(int i=0;i<t;i++){
ans=0;
cin>>n>>m>>k>>x>>y>>d;
x--;
y--;
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
cin>>map[j][k];
}
}
map[x][y]='1';
for(int j=0;j<k;j++){
ax=0;
ay=0;
if(d==0){
ay=1;
}else if(d==1){
ax=1;
}else if(d==2){
ay=-1;
}else{
ax=-1;
}
if(map[x+ax][y+ay]=='.'){
x+=ax;
y+=ay;
map[x][y]='1';
}else{
d=(d+1)%4;
}
}
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
if(map[j][k]=='1'){
ans++;
}
}
}
cout<<ans;
}
return 0;
}
by xyx404 @ 2024-12-07 18:39:37
@awdfkewd
根据你的代码改的。
修改原因看注释,不懂 @ 我问。
#include<iostream>
#include<cstring>
using namespace std;
char map[1000][1000];
int t,n,m,k,x,y,d,ans;
int ax,ay;
int main(){
cin>>t;
for(int i=0;i<t;i++){
ans=0;
cin>>n>>m>>k>>x>>y>>d;
x--;
y--;
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
cin>>map[j][k];
}
}
map[x][y]='1';
for(int j=0;j<k;j++){
ax=0;
ay=0;
if(d==0){
ay=1;
}else if(d==1){
ax=1;
}else if(d==2){
ay=-1;
}else{
ax=-1;
}
if(x+ax>=0&&y+ay>=0&&x+ax<n&&y+ay<m&&map[x+ax][y+ay]!='x'){// 此处考虑边界同时因为下面修改了 map 但是是可以重复走的所以条件改成 map[x+ax][y+ay]!='x'
x+=ax;
y+=ay;
map[x][y]='1';
}else{
d=(d+1)%4;
}
}
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
if(map[j][k]=='1'){
ans++;
}
}
}
cout<<ans<<"\n";// 要换行
}
return 0;
}
by awdfkewd @ 2024-12-07 18:51:48
@xyx404谢谢带佬,已关