fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAX 32000
  4.  
  5. char str[200] ;
  6. typedef struct ll
  7. {
  8. int horz;
  9. int vert;
  10. }moves;
  11.  
  12. moves move1[4];
  13.  
  14. int arr[210][210];
  15. int visited[210][210];
  16. int dist[210][210];
  17. int n,m;
  18. queue< pair<int,int> > q;
  19.  
  20.  
  21. void init()
  22. {
  23. int i,j;
  24. for(i=0;i<n;i++)
  25. {
  26. for(j=0;j<m;j++)
  27. {
  28. if(arr[i][j])
  29. {
  30. dist[i][j]=0;
  31. }
  32. else
  33. dist[i][j]=MAX;
  34. }
  35. }
  36. }
  37.  
  38.  
  39. void bfs()
  40. {
  41. int i,j,k,x,y;
  42. pair<int,int> p,temp;
  43. while(!q.empty())
  44. {
  45. p=q.front();
  46. q.pop();
  47. for(i=0;i<4;i++)
  48. {
  49. x=p.first+move1[i].horz;
  50. y=p.second+move1[i].vert;
  51.  
  52. if(x>=0&&x<n&&y>=0&&y<m&&!visited[x][y])
  53. {
  54. visited[x][y]=1;
  55. dist[x][y]=dist[p.first][p.second]+1;
  56. temp.first=x;
  57. temp.second=y;
  58. q.push(temp);
  59. }
  60. }
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. int test,i,j,k,num;
  67. pair<int,int> p;
  68.  
  69. move1[0].horz=0;
  70. move1[0].vert=-1;
  71.  
  72. move1[1].horz=0;
  73. move1[1].vert=1;
  74.  
  75. move1[2].horz=-1;
  76. move1[2].vert=0;
  77.  
  78. move1[3].horz=1;
  79. move1[3].vert=0;
  80.  
  81. cin>>test;
  82. // scanf("%lld",&test);
  83. for(i=0;i<test;i++)
  84. {
  85.  
  86. cin>>n;
  87. cin>>m;
  88. // scanf("%lld",&n);
  89. //scanf("%lld",&m);
  90. for(j=0;j<n;j++)
  91. {
  92. scanf("%s",str) ;
  93.  
  94. for(int k=0;k<m;k++)
  95. {
  96. arr[j][k]=str[k]-'0';
  97.  
  98. if(arr[j][k]==1)
  99. {
  100. p.first=j;
  101. p.second=k;
  102. q.push(p);
  103. visited[j][k]=1;
  104. dist[j][k]=0;
  105. }
  106. else{
  107. visited[j][k]=0;
  108. dist[j][k] = MAX;
  109. }
  110.  
  111. }
  112. }
  113.  
  114. bfs();
  115. for(j=0;j<n;j++)
  116. {
  117. for(k=0;k<m;k++)
  118. {
  119. //printf("%lld ",dist[j][k]);
  120. cout<<dist[j][k]<<" ";
  121. }
  122. //printf("\n");
  123. cout<<endl;
  124. }
  125.  
  126.  
  127. }
  128. return 0;
  129. }
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
Success #stdin #stdout 0s 3996KB
stdin
2
3 4
0001
0011
0110

4 5
00000
01110
01100
01111
stdout
3 2 1 0 
2 1 0 0 
1 0 0 1 
2 1 1 1 2 
1 0 0 0 1 
1 0 0 1 1 
1 0 0 0 0