Description
Input
Output
Sample Input
2 2 1 3 0 1 3 3 3 3 26 0 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 0 0 0 0
Sample Output
The number of faces needing shielding is 14. The number of faces needing shielding is 54.
Source
1 #include<iostream> 2 #include<string.h> 3 #include<queue> 4 using namespace std; 5 int n,m,k,l; 6 bool tab[70][70][70],visit[70][70][70]; 7 int face_num; 8 class W3{ 9 public: 10 int x,y,z; 11 W3& set(int xx,int yy,int zz){ 12 x=xx;y=yy;z=zz; 13 return *this; 14 } 15 }; 16 void bfs(){ 17 face_num=0; 18 queue<W3> Q; 19 W3 temp; 20 Q.push(temp.set(0,0,0)); 21 while(!Q.empty()){ 22 W3 Top=Q.front();Q.pop(); 23 if(visit[Top.x][Top.y][Top.z])continue; 24 visit[Top.x][Top.y][Top.z]=1; 25 if(Top.x-1>=0){ 26 if(tab[Top.x-1][Top.y][Top.z]==0){ 27 if(!visit[Top.x-1][Top.y][Top.z])Q.push(temp.set(Top.x-1,Top.y,Top.z)); 28 } 29 else face_num++; 30 }//左走一格 31 if(Top.x<=n){ 32 if(tab[Top.x+1][Top.y][Top.z]==0){ 33 if(!visit[Top.x+1][Top.y][Top.z])Q.push(temp.set(Top.x+1,Top.y,Top.z)); 34 } 35 else face_num++; 36 }//右走一格 37 if(Top.y-1>=0){ 38 if(tab[Top.x][Top.y-1][Top.z]==0){ 39 if(!visit[Top.x][Top.y-1][Top.z])Q.push(temp.set(Top.x,Top.y-1,Top.z)); 40 } 41 else face_num++; 42 }//后走一格 43 if(Top.y<=m){ 44 if(tab[Top.x][Top.y+1][Top.z]==0){ 45 if(!visit[Top.x][Top.y+1][Top.z])Q.push(temp.set(Top.x,Top.y+1,Top.z)); 46 } 47 else face_num++; 48 }//前走一格 49 if(Top.z-1>=0){ 50 if(tab[Top.x][Top.y][Top.z-1]==0){ 51 if(!visit[Top.x][Top.y][Top.z-1])Q.push(temp.set(Top.x,Top.y,Top.z-1)); 52 } 53 else face_num++; 54 }//下走一格 55 if(Top.z<=k){ 56 if(tab[Top.x][Top.y][Top.z+1]==0){ 57 if(!visit[Top.x][Top.y][Top.z+1])Q.push(temp.set(Top.x,Top.y,Top.z+1)); 58 } 59 else face_num++; 60 }//上走一格 61 } 62 } 63 int main(){ 64 while(cin>>n>>m>>k>>l){ 65 if(!n && !m && !k && !l)break; 66 memset(tab,0,sizeof(tab)); 67 memset(visit,0,sizeof(visit)); 68 int temp1; 69 for(int i=0;i<l;i++){ 70 cin>>temp1; 71 tab[temp1%(m*n)%n+1][temp1%(m*n)/n+1][temp1/(n*m)+1]=1; 72 }//输入数据并转换为tab[][][]的3维矩阵(这里从1,1,1开始,最外层相当于无人方块) 73 bfs(); 74 cout<<"The number of faces needing shielding is "<<face_num<<".\n"; 75 }return 0; 76 }
POJ 1096 Space Station Shielding (搜索 + 洪泛算法Flood_Fill)
原文:http://www.cnblogs.com/zjutlitao/p/3555777.html