出题人的基本素养
作者:
心在远方_
,
2023-03-19 16:04:30
,
所有人可见
,
阅读 54
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100;
char x[N][N];
int y[N][N];
int m,n;
pair<int,int> w[N * N],ww[N][N];
void bfs(){
memset(y,-1,sizeof y);
int dx[] = {0,-1,0,1};
int dy[] = {-1,0,1,0};
int h = 1,k = 1;
y[h][k] = 0;
w[1] = {1,1};
while(h <= k){
auto q = w[h ++];
for(int i = 0; i <= 3; i ++ ){
int xx = q.first + dx[i];
int yy = q.second + dy[i];
if(xx >= 1 && xx <= m && yy >= 1 && yy <= n && y[xx][yy] == -1 && x[xx][yy] == '0'){
y[xx][yy] = y[q.first][q.second] + 1;
ww[xx][yy] = q;
w[++ k] = {xx,yy};
}
}
}
int e = m,r = n;
while(e != 1 || r != 1){
x[e][r] = '.';
auto qq = ww[e][r];
e = qq.first;
r = qq.second;
}
x[1][1] = '.';
}
int main(){
scanf("%d %d\n",&m,&n);
for (int i = 1; i <= m; i ++ ) {
for (int j = 1; j <= n; j ++ ) scanf("%c ",&x[i][j]);
}
bfs();
for (int i = 1; i <= m; i ++ ) {
for (int j = 1; j <= n; j ++ ) {
printf("%c ",x[i][j]);
}
printf("\n");
}
}