题解:

我脑子里都是翔???

bfs一下就行了 我居然还想什么kd tree!真是too naive,,,

  1 #include<cstdio>
  2 
  3 #include<cstdlib>
  4 
  5 #include<cmath>
  6 
  7 #include<cstring>
  8 
  9 #include<algorithm>
 10 
 11 #include<iostream>
 12 
 13 #include<vector>
 14 
 15 #include<map>
 16 
 17 #include<set>
 18 
 19 #include<queue>
 20 
 21 #include<string>
 22 
 23 #define inf 1000000000
 24 
 25 #define maxn 1000+5
 26 
 27 #define maxm 200000+5
 28 
 29 #define eps 1e-10
 30 
 31 #define ll long long
 32 
 33 #define pa pair<int,int>
 34 
 35 #define for0(i,n) for(int i=0;i<=(n);i++)
 36 
 37 #define for1(i,n) for(int i=1;i<=(n);i++)
 38 
 39 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
 40 
 41 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
 42 
 43 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
 44 
 45 #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
 46 
 47 #define mod 1000000007
 48 
 49 using namespace std;
 50 
 51 inline int read()
 52 
 53 {
 54 
 55     int x=0,f=1;char ch=getchar();
 56 
 57     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 58 
 59     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
 60 
 61     return x*f;
 62 
 63 }
 64 int n,m,d[maxn][maxn];
 65 queue<pa>q;
 66 bool v[maxn][maxn];
 67 const int dx[4]={0,1,-1,0};
 68 const int dy[4]={1,0,0,-1};
 69 
 70 int main()
 71 
 72 {
 73 
 74     freopen("input.txt","r",stdin);
 75 
 76     freopen("output.txt","w",stdout);
 77 
 78     n=read();m=read();
 79     for5(n,m)d[i][j]=inf;
 80     for5(n,m)
 81     {
 82         char ch=getchar();
 83         while(ch!='0'&&ch!='1')ch=getchar();
 84         if(ch=='1'){d[i][j]=0;q.push(pa(i,j));}
 85     }
 86     while(!q.empty())
 87     {
 88         int x=q.front().first,y=q.front().second;q.pop();
 89         for0(i,3)
 90         {
 91             int xx=x+dx[i],yy=y+dy[i];
 92             if(xx<1||xx>n||yy<1||yy>m||d[xx][yy]<=d[x][y])continue;
 93             d[xx][yy]=d[x][y]+1;
 94             if(!v[xx][yy]){v[xx][yy]=1;q.push(pa(xx,yy));}
 95         }
 96     }
 97     for1(i,n){for1(j,m)printf("%d ",d[i][j]);printf("\n");}
 98 
 99     return 0;
100 
101 }  
View Code

相关文章:

  • 2021-09-25
  • 2021-07-05
  • 2021-10-15
  • 2021-05-21
  • 2021-08-12
  • 2021-09-16
  • 2021-06-20
猜你喜欢
  • 2021-07-25
  • 2022-01-04
  • 2021-07-15
  • 2022-01-21
  • 2022-12-23
  • 2021-11-11
  • 2022-01-20
相关资源
相似解决方案