90pt求助
  • 板块P1256 显示图像
  • 楼主wahe
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/12 18:53
  • 上次更新2024/7/12 20:09:25
查看原帖
90pt求助
1021000
wahe楼主2024/7/12 18:53

RT

#include<bits/stdc++.h>
using namespace std;
int n, m;
int vis[1005][1005], ma[1005][1005], vi[1005][1005];
int ttx[4]={1, -1, 0, 0};
int tty[4]={0, 0, -1, 1};
inline bool check(int x, int y){
	return x >= 1 && x <= n && y >= 1 && y <= m && !vis[x][y] && !vi[x][y];
}
queue <int> xx, yy;
inline void bfs(int x, int y){
	xx.push(x);
	yy.push(y);
	ma[x][y] = 0;
	while(!xx.empty()){
		int ux=xx.front(), uy=yy.front();
		xx.pop();
		yy.pop();
		for(int i=0; i<4; i++){
			int tx = ux+ttx[i], ty = uy+tty[i];
			if(check(tx, ty)){
				if(ma[tx][ty] == 0){
					ma[tx][ty] = ma[ux][uy]+1;
				} else{
				    if(ma[tx][ty] <= ma[ux][uy]+1) continue ;
					ma[tx][ty] = min(ma[tx][ty], ma[ux][uy]+1);
				}
				xx.push(tx);
				yy.push(ty);
				vi[tx][ty]=1;
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			char c;
			cin >> c;
			vis[i][j] = c-'0';
		}
	}
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			if(vis[i][j] == 1){
				memset(vi, 0, sizeof vi);
				bfs(i, j);
			}
		}
	} 
	for(int i=1;i<=n; i++){
		for(int j=1; j<=m; j++){
			cout << ma[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}
2024/7/12 18:53
加载中...