zju1008

来源:互联网 发布:java enum 例子 编辑:程序博客网 时间:2024/05/27 00:29

#include <stdio.h>

 

 

 

int map[30][4];//最多25squares,每个squares包含四个三角形

 

int a[30], f[30];

 

int n2, n, tag, q;

 

 

 

bool Check(int i)

 

{

 

/*判断当前squares是否合法,只要判断该方格的

 

3号和其左方的squares1号相同

 

0号和其上方的squares2号相同 

 

    */

 

    if(i >= n && map[a[i]][0] != map[a[i - n]][2]) return false;

 

     if(i % n != 0 && map[a[i]][3] != map[a[i - 1]][1]) return false;

 

   

 

    return true;

 

}

 

 

 

void change(int k)

 

{

 

    //只有该squares的前面的squares放置好,才放置当前squares

 

    if(k == n2){

 

        tag = 1;

 

        return;

 

    }

 

    int i;

 

    for(i = 0;i < q;i++){

 

        if(tag == 1) return;

 

        else if(f[i] > 0){

 

            f[i]--;

 

            a[k] = i;

 

            if(Check(k)) change(k + 1);

 

            f[i]++;

 

        }        

 

    }

 

}

 

 

 

int main()

 

{

 

    int i, j;

 

    int top, right, bottom, left;

 

    int test = 0;

 

    while(scanf("%d", &n) == 1 && n){

 

        if(test) printf("/n");

 

        n2 = n * n;

 

        q = 0;

 

        for(i = 0;i <= n2;i++) f[i] = 0;

 

        for(i = 0;i < n2;i++){

 

            scanf("%d%d%d%d", &top, &right , &bottom, &left);

 

            j = 0;

 

            while(j < q){

 

                if(top == map[j][0] && right == map[j][1]

 

                       && bottom == map[j][2] && left == map[j][3]){

 

                        f[j]++;

 

                       break;

 

                }

 

                j++;

 

            }

 

            if(j == q){

 

                map[q][0] = top;

 

                map[q][1] = right;

 

                map[q][2] = bottom;

 

                map[q][3] = left;

 

                f[q] = 1;

 

                q++;

 

            }

 

        }      

 

        tag = 0;

 

        change(0);

 

        if(tag == 1) printf("Game %d: Possible/n", ++test);

 

        else printf("Game %d: Impossible/n", ++test);

 

    }

 

    return 0;

 

}