样例死循环,求助大佬,悬赏4个关注
查看原帖
样例死循环,求助大佬,悬赏4个关注
1198296
封禁用户楼主2024/5/11 13:17

rt.

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
bool vis[30][30][5][10];
bool a[30][30];
int sx,sy,tx,ty;
struct Node{
	int x,y,to,col,tim;
};
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void bfs(){
	queue<Node> q;
	q.push({sx,sy,0,0,0});
	vis[sx][sy][0][0]=1;
	while(!q.empty()){
		Node tmp=q.front();
		
		if(tmp.x==tx&&tmp.y==ty&&tmp.col==0){
			cout<<"minimum time = "<<tmp.tim<<" sec\n";
			return ;
		}
		for(int i=-1;i<=1;++i){
			Node nxt=tmp;
			if(i!=0){
				nxt.to=(nxt.to+i+4)%4;
			}else{
				nxt.x+=dx[nxt.to];
				nxt.y+=dy[nxt.to];
				nxt.col=(nxt.col+1)%5;
			}nxt.tim+=1;
			if(nxt.x<1||nxt.x>n||nxt.y<1||nxt.y>m||a[nxt.x][nxt.y]=='#'||vis[nxt.x][nxt.y][nxt.to][nxt.col]==1){
				
				continue;
			}
			q.push(nxt);
			vis[nxt.x][nxt.y][nxt.to][nxt.col]=1;
		}
	}
	cout<<"destination not reachable\n";
}
signed main(){
	int T=0;
	char c;
	while(cin>>n>>m){
		++T;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=m;++j){
				cin>>c;
				if(c=='S') sx=i,sy=j;
				if(c=='#') a[i][j]=1;
				if(c=='T') tx=i,ty=j;
			}
		}
		cout<<"Case #"<<T<<endl;
		bfs();
	}
	return 0;
}
2024/5/11 13:17
加载中...