跟着书上做的~
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<string>
#include<queue>
using namespace std;
char view[8][12][12];
char p[12][12][12];
int n;
void getpos(int k,int i,int j,int l,int& x,int& y,int& z)
{
if(k==0)
{
x=l,y=j,z=i;
}
else if(k==1)
{
y=l,z=i,x=n-1-j;
}
else if(k==2)
{
x=n-1-l,y=n-1-j,z=i;
}
else if(k==3)
{
x=j,y=n-l-1,z=i;
}
else if(k==4)
{
x=n-1-i,y=j,z=l;
}
else if(k==5)
{
x=i,y=j,z=n-l-1;
}
}
int main()
{
// freopen("input.txt","r",stdin);
int i,j,k,l;
while(scanf("%d",&n)==1&&n)
{
for(i=0;i<n;i++)
{
for(k=0;k<6;k++)
{
for(j=0;j<n;j++)
{
char c;
cin>>c;
view[k][i][j]=c;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
p[i][j][k]='#';
}
}
}
for(k=0;k<6;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(view[k][i][j]=='.')
{
int x,y,z;
for(l=0;l<n;l++)
{
getpos(k,i,j,l,x,y,z);
p[x][y][z]='.';
}
}
}
}
}
while(1)
{
bool flag=false;
for(k=0;k<6;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(view[k][i][j]!='.')
{
for(l=0;l<n;l++)
{
int x,y,z;
getpos(k,i,j,l,x,y,z);
if(p[x][y][z]=='.') continue;
if(p[x][y][z]=='#')
{
p[x][y][z]=view[k][i][j];
break;
}
if(p[x][y][z]==view[k][i][j])
{
break;
}
p[x][y][z]='.';
flag=true;
}
}
}
}
}
if(flag==false)
{
break;
}
}
int ans=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(p[i][j][k]!='.')
{
ans++;
}
}
}
}
printf("Maximum weight: %d gram(s)\n",ans);
}
return 0;
}