本代码纯纯暴力模拟(太蒻了只会这么写,怎么好理解怎么来)
#include<bits/stdc++.h>
using namespace std;
int n;
char map1[1006][1006];
int vis[1006][1006]={};
int zx,zy,sp,xx,xy,fx,cnt;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>zx>>zy>>sp;
cin>>xx>>xy>>fx;
for(int j=1;j<=zx;j++){
for(int k=1;k<=zy;k++){
cin>>map1[j][k];
}
}
vis[xx][xy]=1;
for(int j=1;j<=sp;j++){
if(fx==0){//从这里
if(map1[xx][xy+1]=='.'){
vis[xx][xy+1]=1;
xy+=1;
}
else if(map1[xx][xy+1]=='x'){
fx=(fx+1)%4;
}
else{
fx=(fx+1)%4;
}
}
if(fx==1){//到这里会多一次行动次数,导致样例一输出不是3是4(本人很乐,考场里解决了家里不会了)
if(map1[xx+1][xy]=='.'){
vis[xx+1][xy]=1;
xx+=1;
}
else if(map1[xx+1][xy]=='x'){
fx=(fx+1)%4;
}
else{
fx=(fx+1)%4;
}
}
if(fx==2){
if(map1[xx][xy-1]=='.'){
vis[xx][xy-1]=1;
xy-=1;
}
else if(map1[xx][xy-1]=='x'){
fx=(fx+1)%4;
}
else{
fx=(fx+1)%4;
}
}
if(fx==3){
if(map1[xx-1][xy]=='.'){
vis[xx-1][xy]=1;
xx-=1;
}
else if(map1[xx-1][xy]=='x'){
fx=(fx+1)%4;
}
else{
fx=(fx+1)%4;
}
}
}
for(int j=1;j<=zx;j++){
for(int k=1;k<=zy;k++){
if(vis[j][k]==1){
cnt++;
vis[j][k]=0;//考场里也这么写的为什么考场里清零了,在家里没清零(悲)
}
}
}
cout<<cnt<<endl;
}
return 0;
}