遇到一个非常奇怪的错误,看了好久
查看原帖
遇到一个非常奇怪的错误,看了好久
434015
Calanosay楼主2021/3/29 20:13
#include<bits/stdc++.h>
using namespace std;
const int maxn=305;
int a[maxn][maxn],cx,cy,vis[maxn][maxn],m,n,fx,fy,sx,sy;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void check(int x,int y,char c){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j]==c&&i!=x&&j!=y){
				cx=i;
				cy=j;
				break;
			}
}
struct node{
	int x,y,time;
};
int main(){
	queue<node> q;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			char c;
			cin>>c;
			if(c=='.')	a[i][j]=1;
			else if(c=='@'){
				a[i][j]=1;
				sx=i;
				sy=j;
			}
			else if(c=='='){
				a[i][j]=1;
				fx=i;
				fy=j;
			}
			else if(isalpha(c)){
				a[i][j]=c;
							}
		}
		q.push((node){sx,sy,0});
		while(!q.empty()){
			int nowx=q.front().x,nowy=q.front().y,nowt=q.front().time;
			q.pop();
			if(nowx==fx&&nowy==fy){
				cout<<nowt;
				return 0;
			}
			if(a[nowx][nowy]!=1&&a[nowx][nowy]!=0){
				check(nowx,nowy,a[nowx][nowy]);
				q.push((node){cx,cy,nowt});
				continue;
			}
			vis[nowx][nowy]=1;
			for(int i=0;i<4;i++){
				int nextx=nowx+dx[i],nexty=nowy+dy[i];
				if((a[nextx][nexty]!=0)&&(!vis[nextx][nexty])){
					q.push((node){nextx,nexty,nowt+1});
				}
			}
			
		}
}

写代码写到一半想测试一下,发现死活都是RE或者TLE,反正就是一直死循环的样子。后来找到一个地方

			for(int i=0;i<4;i++){
				int nextx=nowx+dx[i],nexty=nowy+dy[i];
				if((a[nextx][nexty]!=0)&&(!vis[nextx][nexty])){
					q.push((node){nextx,nexty,nowt+1});
				}

最后这个循环如果把a[nextx][nexty]!=0给去掉的话能直接出来答案(虽然是错的)但是如果不去掉会一直出不来答案,为什么。。。我看了好久了都

2021/3/29 20:13
加载中...