显示图像
以每一个1为起点向外搜索,不断更新最近距离,如果不能更新则剪枝,不然会超时
`#include
int n,m;
char a;
int m1[4]={-1,1,0,0},m2[4]={0,0,-1,1};
struct q1{
int i,j;
int d=0;
} q_bai[2000007];
int tail_b=0;
void solve2(){
int lst[n][m],flag[n][m];
for(int i=0;i<n;i++){
getchar();
for(int j=0;j<m;j++){
flag[i][j]=-1;
scanf("%c",&a);
if(a'1'){
lst[i][j]=0;
q_bai[tail_b].i=i;
q_bai[tail_b].j=j;
tail_b++;
}
else lst[i][j]=40000;
}
}
struct q1 que[100007];
for(int i=0;i<tail_b;i++){
que[0]=q_bai[i];
int head=0,tail=1;
flag[que[head].i][que[head].j]=0;
while(head<tail){
int x=que[head].i,y=que[head].j;
for(int j=0;j<4;j++){
int n_x=x+m1[j],n_y=y+m2[j];
if(n_x>=0&&n_x<n&&n_y>=0&&n_y<m&&
flag[n_x][n_y]<i&&que[head].d+1<lst[n_x][n_y]){
lst[n_x][n_y]=que[head].d+1;
flag[n_x][n_y]=i;
que[tail].i=n_x;
que[tail].j=n_y;
que[tail].d=que[head].d+1;
tail++;
}
}
head++;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d",lst[i][j]);
if(jm-1) printf("\n");
else printf(" ");
}
}
return;
}
int main(){
scanf("%d %d",&n,&m);
solve2();
return 0;
} `
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步