在main函数中又定义一遍全局变量:会导致程序出错
因为在函数中调用这个全局变量时,调用的值是在头文件下面的初始值,虽然你在main函数中改变了变量的值,但是你在main函数中重新定义了
如果这样写会过50%的数据,因为在main函数中又重新定义了,把main函数中的定义去掉时就可以ac代码了
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 510;
char arr[N][N];
int t,n,m;
int sx=0,sy=0;//1.。
int tx=0,ty=0;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
bool st[N][N];
struct node{int x,y;
};
bool bfs(){queue<node>q;q.push({sx,sy});st[sx][sy]=true;while(!q.empty()){node t=q.front();q.pop();for(int i=0;i<4;i++){int a=t.x+dx[i];int b=t.y+dy[i];if(a<0||b<0||a>=n||b>=m) continue;if(arr[a][b]=='x'||st[a][b]) continue;if(arr[a][b]=='t') return true;st[a][b]=true;q.push({a,b});}}return false;
}
int main(){cin>>t;while(t--){memset(arr,0,sizeof arr);cin>>n>>m;int sx=0,sy=0;//重新定义了全局变量,但是调用时用的是1处的值
//也就是说你在main函数中对sx和sy的修改没用for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>arr[i][j];if(arr[i][j]=='s') sx=i,sy=j;if(arr[i][j]=='t') tx=i,ty=j;}}memset(st,false,sizeof st);if(bfs()) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}