fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAX 32000
  4.  
  5. typedef struct ll
  6. {
  7. int horz;
  8. int vert;
  9. }moves;
  10.  
  11. moves move1[4];
  12.  
  13. int arr[210][210];
  14. int visited[210][210];
  15. int dist[210][210];
  16. int n,m;
  17. char num[210];
  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. visited[p.first][p.second]=1;
  48.  
  49. for(i=0;i<4;i++)
  50. {
  51. x=p.first+move1[i].horz;
  52. y=p.second+move1[i].vert;
  53.  
  54. if(x>=0&&x<n&&y>=0&&y<m&&!visited[x][y]&&dist[x][y]!=0)
  55. {
  56. visited[x][y]=1;
  57. dist[x][y]=dist[p.first][p.second]+1;
  58. temp.first=x;
  59. temp.second=y;
  60. q.push(temp);
  61. }
  62. }
  63. }
  64. }
  65.  
  66. int main()
  67. {
  68. int test,i,j,k;
  69. pair<int,int> p;
  70.  
  71. move1[0].horz=0;
  72. move1[0].vert=-1;
  73.  
  74. move1[1].horz=0;
  75. move1[1].vert=1;
  76.  
  77. move1[2].horz=-1;
  78. move1[2].vert=0;
  79.  
  80. move1[3].horz=1;
  81. move1[3].vert=0;
  82.  
  83. cin>>test;
  84. // scanf("%lld",&test);
  85. for(i=0;i<test;i++)
  86. {
  87.  
  88. cin>>n;
  89. cin>>m;
  90. // scanf("%lld",&n);
  91. //scanf("%lld",&m);
  92. for(j=0;j<n;j++)
  93. {
  94. cin>>num;
  95. //scanf("%lld",&num);
  96. for(k=0;k<m;k++)
  97. {
  98. arr[j][k]=num[k]-'0';
  99. if(arr[j][k]==1)
  100. {
  101. p.first=j;
  102. p.second=k;
  103. q.push(p);
  104. visited[j][k]=0;
  105. dist[j][k]=0;
  106. }
  107. else{
  108. visited[j][k]=0;
  109. dist[j][k]=MAX;
  110. }
  111.  
  112. }
  113. }
  114. //cout<<"reached"<<endl;
  115. bfs();
  116. for(j=0;j<n;j++)
  117. {
  118. for(k=0;k<m;k++)
  119. {
  120. //printf("%lld ",dist[j][k]);
  121. cout<<dist[j][k]<<" ";
  122. }
  123. //printf("\n");
  124. cout<<endl;
  125. }
  126.  
  127.  
  128. }
  129. return 0;
  130. }
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
Success #stdin #stdout 0s 3952KB
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