Friday, May 27, 2011

11110 - Equidivisions

#include<iostream>
#include<cstdio>
#include<cstring>
#include <cstdlib>
#define M 103
using namespace std;

int Board[M][M],point[60];
int start[M][2],N,n;
char inp[10000];
int next[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

void format (int num);
void DFS_Visit(int,int);

int main()
{
    int i,j,f;
    //freopen("in.txt","r",stdin);

    while(gets(inp))
    {
        sscanf(inp,"%d",&n);
        if(!n)break;

        for(i=0;i<=n;i++)
            for(j=0;j<=n;j++)
                Board[i][j] = n;

        for(i=1;i<n;i++)
        {
            gets(inp);
            format(i);
        }

        f = 1;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            {
                if(!Board[i][j])
                    continue;
                N=1;

                DFS_Visit(i,j);
                if(N!=n){f=0;goto NEXT;}
            }
NEXT:
        if(f)
            printf("good\n");
        else
            printf("wrong\n");

        memset(Board,0,sizeof(Board));
        memset(point,0,sizeof(point));
        memset(start,0,sizeof(start));
    }
    return 0;
}

void DFS_Visit(int u,int v)
{
    int i,tu,tv,x;
    x = Board[u][v];
    Board[u][v] = 0;

    for(i=0;i<4;i++)
    {
        tu = u + next[i][0];
        tv = v + next[i][1];
        if(tu>=0&&tu<n&&tv>=0&&tv<n&&Board[tu][tv]==x)
        {
            N++;
            DFS_Visit(tu,tv);
        }
    }
}

void format (int num)
{
    char *pch;
    pch = strtok (inp, " ");

    while ( pch != NULL )
    {
        int c1 = atoi (pch);
        pch = strtok (NULL, " ");
        int c2 = atoi (pch);
        pch = strtok (NULL, " ");
        Board [c1 - 1] [c2 - 1] = num;
    }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.