52分求助
查看原帖
52分求助
493127
awesomegordon楼主2022/6/10 10:22

大佬们看看吧,我犯了什么低级错误?QWQ

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
};
queue<node> q;
int sx,sy,ex,ey;
int w[][2]={1,0,-1,0,0,1,0,-1};
int dis[305][305];
char tu[305][305];
int n,m;
void tele(int &x,int &y){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(tu[i][j]==tu[x][y]&&i!=x&&j!=y){
				x=i;
				y=j;
				return ;
			}
		}
	}
}
void bfs(){
	q.push({sx,sy});
	dis[sx][sy]=0;
	while(!q.empty()){
		node p=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int tx=p.x+w[i][0],ty=p.y+w[i][1];
			if(tu[tx][ty]>='A'&&tu[tx][ty]<='Z'){
				tele(tx,ty);
			}
			if(tx<1||tx>n||ty<1||ty>m||dis[tx][ty]!=-1||tu[tx][ty]=='#'){
				continue;
			}
			dis[tx][ty]=dis[p.x][p.y]+1;
			q.push({tx,ty});
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%s",tu[i]+1);
	}
	memset(dis,-1,sizeof(dis));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(tu[i][j]=='@'){
				sx=i;
				sy=j;
			}
			if(tu[i][j]=='='){
				ex=i;
				ey=j;
			}
		}
	}
	bfs();
	printf("%d",dis[ex][ey]);
	return 0;
}

帮帮我吧orz

2022/6/10 10:22
加载中...