fork download
  1. #include <iostream>
  2. #include <queue>
  3. #define MAX 101
  4. using namespace std;
  5. // 4 7 8 6 3 1
  6. typedef struct{
  7. int x,y, z;
  8. }dir;
  9. queue<dir> q;
  10. int m,n,h;
  11. int arr[MAX][MAX][MAX];
  12. bool visited[MAX][MAX][MAX];
  13. int dx[6] = {0,0,1,-1,0,0};
  14. int dy[6] = {1,-1,0,0,0,0};
  15. int dz[6] = {0,0,0,0,1,-1};
  16.  
  17. int fcnt;
  18. int cnt; // 1의 개수
  19. bool flag;
  20. int day;
  21.  
  22. void output(){
  23. for(int i = 0;i<m;++i){
  24. for(int j =0;j<n;++j){
  25. for(int k =0;k<h;++k){
  26. cout<< arr[i][j][k]<<" ";
  27. }
  28. cout<<endl;
  29. }
  30. cout<<endl;
  31. }
  32. }
  33.  
  34. bool isInRange(dir d){
  35. return
  36. (0<= d.x && d.x < m
  37. && 0<= d.y && d.y < n
  38. && 0<= d.z && d.z < h);
  39. }
  40.  
  41. void bfs(){
  42.  
  43. while(!q.empty()){
  44. ++day; cnt = q.size();
  45. for(int k = 0;k<fcnt;++k){
  46. dir tmp = q.front();
  47. q.pop();
  48. for(int i = 0;i<6;++i){
  49. int nextX = tmp.x + dx[i];
  50. int nextY = tmp.y + dy[i];
  51. int nextZ = tmp.z + dz[i];
  52. if(!visited[nextX][nextY][nextZ] && isInRange({nextX,nextY,nextZ})){
  53. visited[nextX][nextY][nextZ] = true;
  54. arr[nextX][nextY][nextZ]= 1;
  55. q.push({nextX,nextY,nextZ});
  56. flag = true;
  57. }
  58. }
  59.  
  60. }
  61.  
  62. }
  63. }
  64.  
  65. int main(void){
  66. bool hasZero = false;
  67.  
  68. cin>>m>>n>>h;
  69. for(int i = 0;i<h;++i){
  70. for(int j = 0;j<n;++j){
  71. for(int k = 0;k<m;++k){
  72. cin>>arr[i][j][k];
  73. if(arr[i][j][k] == -1)
  74. visited[i][j][k] = true;
  75. else if(arr[i][j][k] == 1){
  76. q.push({i,j,k});
  77. visited[i][j][k] = true;
  78. fcnt++;
  79. }
  80.  
  81. else if(arr[i][j][k] == 0)
  82. hasZero = true;
  83.  
  84. }
  85. }
  86. }
  87.  
  88. if(!hasZero){
  89. cout<<0<<endl;
  90. return 0;
  91. }
  92.  
  93. bfs();
  94. for(int i = 0;i<h;++i){
  95. for(int j = 0;j<n;++j){
  96. for(int k = 0;k<m;++k){
  97. if(arr[i][j][k] == 0){
  98. cout<<-1<<endl;
  99. return 0;
  100. }
  101. }
  102. }
  103. }
  104.  
  105. cout<<day<<endl;
  106. return 0;
  107. }
Success #stdin #stdout 0s 4724KB
stdin
5 3 2
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
stdout
-1