【CH2501】矩阵距离

这是一道裸的广搜题吧……

可能是《算法竞赛进阶指南》最水的一道题了……

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 using namespace std;
 6 queue<int> qx;
 7 queue<int> qy;
 8 int n,m,dis[1010][1010],a[1010][1010];
 9 int fx[4]={1,-1,0,0};
10 int fy[4]={0,0,1,-1};
11 int main() {
12     cin>>n>>m;
13     for(int i=1;i<=n;i++)
14         for(int j=1;j<=m;j++)
15             scanf("%1d",&a[i][j]);
16     memset(dis,-1,sizeof(dis));
17     for(int i=1;i<=n;i++)
18         for(int j=1;j<=m;j++)
19             if(a[i][j]) {
20                 qx.push(i);
21                 qy.push(j);
22                 dis[i][j]=0;
23             }
24     while(!qx.empty()) {
25         int nowx=qx.front();
26         int nowy=qy.front();
27         qx.pop();
28         qy.pop();
29         for(int i=0;i<4;i++) {
30             int xx=nowx+fx[i];
31             int yy=nowy+fy[i];
32             if(xx<1||xx>n||yy<1||yy>m) continue ;
33             if(dis[xx][yy]==-1) {
34                 dis[xx][yy]=dis[nowx][nowy]+1;
35                 qx.push(xx);
36                 qy.push(yy);
37             }
38         }
39     }
40     for(int i=1;i<=n;i++) {
41         for(int j=1;j<=m;j++)
42             cout<<dis[i][j]<<" ";
43         cout<<endl;
44     }
45     return 0;
46 }
AC Code

 

posted @ 2019-03-23 20:17  AD_shl  阅读(280)  评论(0编辑  收藏  举报