Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

一个程序壳?(同问:为什么不A?)

Posted by waaao at 2012-08-05 20:34:01 on Problem 1052
#include <cstdio>
using namespace std;
const int NMax=25;
int N;
char A[3][8][NMax][NMax];
bool cube[NMax][NMax][NMax],fw[NMax][NMax][NMax];
void DFS(int x,int y,int z)
{
    fw[x][y][z]=1;
    if(x+1<N && !fw[x+1][y][z] && cube[x+1][y][z]) DFS(x+1,y,z);
    if(x>0 && !fw[x-1][y][z] && cube[x-1][y][z]) DFS(x-1,y,z);
    if(y+1<N && !fw[x][y+1][z] && cube[x][y+1][z]) DFS(x,y+1,z);
    if(y>0 && !fw[x][y-1][z] && cube[x][y-1][z]) DFS(x,y-1,z);
    if(z+1<N && !fw[x][y][z+1] && cube[x][y][z+1]) DFS(x,y,z+1);
    if(z>0 && !fw[x][y][z-1] && cube[x][y][z-1]) DFS(x,y,z-1);
}
bool con()
{
    for(int i=0;i<N;i++) for(int j=0;j<N;j++) for(int k=0;k<N;k++)
        fw[i][j][k]=0;
    for(int i=0;i<N;i++) for(int j=0;j<N;j++)
        if(!fw[i][j][0] && cube[i][j][0])
            DFS(i,j,0);
    for(int i=0;i<N;i++) for(int j=0;j<N;j++) for(int k=0;k<N;k++)
        if(!fw[i][j][k] && cube[i][j][k]) return 0;
    puts("Connect OK");
    return 1;
}
bool ThreeV(int i,int j,int k)
{
    for(int x=0;x<N;x++) for(int y=0;y<N;y++)
        if(A[0][i][x][y]=='X')
        {
            bool flag2=0;
            for(int f=0;f<N;f++) if(cube[x][y][f]==1) {
                flag2=1;
                break;
            }
            if(flag2==0) return 0;
        }  
    for(int x=0;x<N;x++) for(int y=0;y<N;y++)
        if(A[1][j][x][y]=='X')
        {
            bool flag2=0;
            for(int f=0;f<N;f++) if(cube[f][x][y]==1) {
                flag2=1;
                break;
            }
            if(flag2==0) return 0;
        }   
    for(int x=0;x<N;x++) for(int y=0;y<N;y++)
        if(A[2][k][x][y]=='X')
        {
            bool flag2=0;
            for(int f=0;f<N;f++) if(cube[x][f][y]==1) {
                flag2=1;
                break;
            }
            if(flag2==0) return 0;
        }  
    puts("Three View OK");
    return 1;
}
int main()
{
    FILE *fout=fopen("a.txt","w");
    int T=0;
    while(scanf("%d",&N),N) {
        T++;
        for(int I=0;I<3;I++)
            for(int i=0;i<N;i++)
                scanf("%s",A[I][0][i]);
        //for(int I=0;I<3;I++)
        //    for(int i=0;i<N;i++)
        //        printf("%s\n",A[I][0][i]);
        for(int I=0;I<3;I++) {
            for(int i=1;i<4;i++)
                for(int x=0;x<N;x++) 
                    for(int y=0;y<N;y++)
                        A[I][i][x][y]=A[I][i-1][N-y-1][x];
            //puts("Here");
            for(int i=4;i<8;i++)
                for(int x=0;x<N;x++) 
                    for(int y=0;y<N;y++)
                        A[I][i][x][y]=A[I][i-4][x][N-y-1];
            //for(int i=0;i<8;i++) {
            //    for(int x=0;x<N;x++) {
            //        printf("%s",A[I][i][x]);
            //        puts("");
            //    }
            //}
        }
        bool flag=0;
        for(int i=0;i<8 && !flag;i++) for(int j=0;j<8 && !flag;j++) for(int k=0;k<8 && !flag;k++) 
        {
            for(int i1=0;i1<N;i1++) for(int j1=0;j1<N;j1++) for(int k1=0;k1<N;k1++)
                cube[i1][j1][k1]=1;
            for(int x=0;x<N;x++) for(int y=0;y<N;y++)
                if(A[0][i][x][y]=='-')
                    for(int f=0;f<N;f++)
                        cube[x][y][f]=0;
            for(int x=0;x<N;x++) for(int y=0;y<N;y++)
                if(A[1][j][x][y]=='-')
                    for(int f=0;f<N;f++)
                        cube[f][x][y]=0;
            for(int x=0;x<N;x++) for(int y=0;y<N;y++)
                if(A[2][k][x][y]=='-')
                    for(int f=0;f<N;f++)
                        cube[x][f][y]=0;
            //for(int i1=0;i1<N;i1++) {
            //    for(int j1=0;j1<N;j1++) { 
            //        for(int k1=0;k1<N;k1++)
            //            printf("%d",cube[i1][j1][k1]);
            //        puts("");
            //    }
            //    puts("");
            //}
            //while(1);
            if(con() && ThreeV(i,j,k)) {
                flag=1;
                for(int i1=0;i1<N;i1++) {
                    for(int j1=0;j1<N;j1++) {
                        for(int k1=0;k1<N;k1++)
                            printf("%d",cube[i1][j1][k1]);
                        puts("");
                    }
                    puts("");
                }
                break;
            }
        }
        printf("Data set %d: ",T);
        if(flag) puts("Valid set of patterns");
        else puts("Impossible combination");
    }
    getchar();getchar();getchar();getchar();getchar();getchar();
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator