#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
using namespace std;
int map[6][6];
int num[26];
struct node
{
int u,d,l,r;
};
node g[26];
bool f=false;
int n=0,m=0,cnt=0;
void dfs(int dp)
{
int row=dp/n;
int col=dp%n;
if(f) return;
if(dp==n*n)
{
f=true;
return;
}
else
{
for(int i=0;i<cnt;i++)
{
if(num[i]==0) continue;
if(row>0&&g[map[row-1][col]].d!=g[i].u) continue;
if(col>0&&g[map[row][col-1]].r!=g[i].l) continue;
map[row][col]=i;
num[i]--;
dfs(dp+1);
num[i]++;
}
}
}
int main()
{
int t=0;
while(cin>>n&&n!=0)
{
int i=0,j=0,k=0,uu=0,dd=0,ll=0,rr=0;
cnt=0;
f=false;
memset(num,0,sizeof(num));
for(i=0;i<n*n;i++)
{
cin>>uu>>rr>>dd>>ll;
for(k=0;k<cnt;k++)
{
if(g[k].u==uu&&g[k].r==rr&&g[k].d==dd&&g[k].l==ll)
{
break;
}
}
if(k==cnt)
{
g[cnt].u=uu;
g[cnt].r=rr;
g[cnt].d=dd;
g[cnt].l=ll;
num[cnt]=1;
cnt++;
}
else
num[k]++;
}
t++;
dfs(0);
if(t!=1) cout<<endl;
cout<<"Game "<<t<<": ";
if(f)
cout<<"Possible"<<endl;
else
cout<<"Impossible"<<endl;
}
return 0;
}
ZOJ 1008 Gnome Tetravex
最新推荐文章于 2021-02-16 20:25:33 发布