迷宫求调
查看原帖
迷宫求调
865874
Max20121024楼主2024/5/26 13:18
#include<bits/stdc++.h>
using namespace std;
int n,m,maze[1010][1010],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},color[1010][1010],num[100010],x,y;
char ss;
queue<int> q;
int bfs(int x,int y){
	if(color[x][y]!=0)return num[color[x][y]];
	q.push(x);
	q.push(y);
	int cnt=0;
	while(!q.empty()){
		int ax=q.front();
		q.pop();
		int by=q.front();
		q.pop();
		color[ax][by]=m;
		cnt++;
		for(int i=0;i<4;i++){
			int lx=ax+dx[i];
			int ly=by+dy[i];
			if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[ax][by]&&color[lx][ly]==0){
				q.push(lx);
				q.push(ly);
			}
		}
	}
	return cnt;
}
int dfs(int x,int y,int cnt){
	if(color[x][y]!=0)return num[color[x][y]];
	color[x][y]=m;
	for(int i=0;i<4;i++){
		int lx=x+dx[i];
		int ly=y+dy[i];
		if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[x][y]&&color[lx][ly]==0){
			dfs(lx,ly,cnt+1);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>ss;
			maze[i][j]=ss-'0';
		}
	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=n;j++){
//			cout<<maze[i][j]<<' ';
//		}
//		cout<<endl;
//	}
	while(m--){
		cin>>x>>y;
		cout<<bfs(x,y);
	}
}

感觉像bfs函数if条件判断有点问题

求大神帮忙

2024/5/26 13:18
加载中...