48分求助!!!3,4,6WA了!!!
  • 板块P1162 填涂颜色
  • 楼主taoyize
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/11/18 20:38
  • 上次更新2023/11/18 21:47:19
查看原帖
48分求助!!!3,4,6WA了!!!
1097100
taoyize楼主2023/11/18 20:38

源代码如下

#include<bits/stdc++.h>
using namespace std;
const int mx=31;
struct node{
	int x,y;
};
queue<node> q;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int n,a[mx][mx],b[mx][mx],ans[mx][mx];bool vis[mx][mx];
bool check(int x,int y){
	if(x>=0&&y>=0&&x<n&&y<n&&vis[x][y]&&a[x][y]==0) return true;
	else return false;
}
bool bfs(node m){
	bool ans1=false;
	q.push(m);
	while(!q.empty()){
		node nw=q.front();
		if(nw.x==0||nw.y==0||nw.x==n-1||nw.y==n-1) ans1=true;
		q.pop();
		for(int i=0;i<4;i++){
			int nx=nw.x+dx[i];
			int ny=nw.y+dx[i];
			if(check(nx,ny)){
				vis[nx][ny]=false;
				b[nx][ny]=3;
				q.push({nx,ny});
			}
		}
	}
	return ans1;
}
void draw(bool x){
	if(x){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(b[i][j]==3) ans[i][j]=0;
			}
		}
	}
	else{
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(b[i][j]==3) ans[i][j]=2;
			}
		}
	}
}
void clear(){
	memset(b,0,sizeof(b));
}
int main(){
	memset(vis,true,sizeof(vis));
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++) cin>>a[i][j];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(a[i][j]==0){
				draw(bfs({i,j}));
				clear();
			}
			else ans[i][j]=1;
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cout<<ans[i][j]<<" ";
		}
		cout<<endl;
	}
}

大佬求助 !!!! 小萌新学习BFS的坎坷之路。。。

2023/11/18 20:38
加载中...