bjoi 2010 矩阵距离 BFS

 

思路:BFS

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 #define MAXN 1100
 8 int d[MAXN][MAXN];
 9 char a[MAXN][MAXN];
10 pair<int,int> Q[MAXN*MAXN];
11 int n,m;
12 int main()
13 {
14     int left=1,right=0;
15     memset(d,0x3f,sizeof(d));
16     int i,j,x,y;
17     scanf("%d%d",&n,&m);
18     for(i=0;i<n;i++)
19          scanf("%s",a[i]);
20     for(i=0;i<n;i++)
21         for(j=0;j<m;j++)
22             if(a[i][j]==49)
23             {
24                 d[i][j]=0;
25                 Q[++right].first=i; Q[right].second=j;
26             }
27     while(left<=right)
28     {
29         x=Q[left].first; y=Q[left++].second;
30         if(x>0&&d[x][y]+1<d[x-1][y]) 
31         {
32             d[x-1][y]=d[x][y]+1;
33             Q[++right].first=x-1; Q[right].second=y;
34         }
35         if(y<m-1&&d[x][y]+1<d[x][y+1]) 
36         {
37             d[x][y+1]=d[x][y]+1;
38             Q[++right].first=x; Q[right].second=y+1;
39         }
40         if(y>0&&d[x][y]+1<d[x][y-1]) 
41         {
42             d[x][y-1]=d[x][y]+1;
43             Q[++right].first=x; Q[right].second=y-1;
44         }
45         if(x<n-1&&d[x][y]+1<d[x+1][y]) 
46         {
47             d[x+1][y]=d[x][y]+1;
48             Q[++right].first=x+1; Q[right].second=y;
49         }
50     }
51     for(i=0;i<n;i++)
52     {
53         for(j=0;j<m;j++)
54             printf("%d ",d[i][j]);
55         printf("\n");
56     }
57     return 0;
58 }

posted on 2012-04-11 21:10  myoi  阅读(269)  评论(0编辑  收藏  举报

导航