您的位置:首页 > 其它

hdu2514 Another Eight Puzzle

2010-08-10 16:51 267 查看
#include<iostream>
#include<cmath>
using namespace std;
int x[10],f[10][10],a[10],num,i;
int used(int n)
{
for(i=1;i<n;i++)
if(x[i]==x
)return 1;
return 0;
}
void fun()
{
for(x[1]=1;x[1]<=8;x[1]++)
{
for(x[2]=1;x[2]<=8;x[2]++)
{
if(x[2]==x[1])continue;
if(abs(x[2]-x[1])==1)continue;
for(x[3]=1;x[3]<=8;x[3]++)
{
if(used(3)==1)continue;
if(abs(x[3]-x[1])==1)continue;
if(abs(x[3]-x[2])==1)continue;
for(x[4]=1;x[4]<=8;x[4]++)
{
if(used(4)==1)continue;
if(abs(x[4]-x[1])==1)continue;
if(abs(x[4]-x[3])==1)continue;
for(x[5]=1;x[5]<=8;x[5]++)
{
if(used(5)==1)continue;
if(abs(x[5]-x[2])==1)continue;
if(abs(x[5]-x[3])==1)continue;
for(x[6]=1;x[6]<=8;x[6]++)
{
if(used(6)==1)continue;
if(abs(x[6]-x[2])==1)continue;
if(abs(x[6]-x[3])==1)continue;
if(abs(x[6]-x[4])==1)continue;
if(abs(x[6]-x[5])==1)continue;
for(x[7]=1;x[7]<=8;x[7]++)
{
if(used(7)==1)continue;
if(abs(x[7]-x[3])==1)continue;
if(abs(x[7]-x[4])==1)continue;
if(abs(x[7]-x[6])==1)continue;
for(x[8]=1;x[8]<=8;x[8]++)
{
if(used(8)==1)continue;
if(abs(x[8]-x[5])==1)continue;
if(abs(x[8]-x[6])==1)continue;
if(abs(x[8]-x[7])==1)continue;
num++;
for(i=1;i<=8;i++)
f[num][i]=x[i];
}
}
}
}
}
}
}
}
}
int main()
{
int T,ca=0,ans,j,b;
num=0;
bool flag;
fun();
cin>>T;
while(T--)
{
for(i=1;i<=8;i++)
cin>>a[i];
ans=0;
for(i=1;i<=num;i++)
{
flag=0;
for(j=1;j<=8;j++)
{
if(a[j]==0)continue;
if(a[j]!=f[i][j]){flag=1;break;}
}
if(flag==0)
{
ans++;
b=i;
}
}
if(ans==0)printf("Case %d: No answer/n",++ca);
if(ans>1)printf("Case %d: Not unique/n",++ca);
if(ans==1)
{
printf("Case %d: ",++ca);
for(i=1;i<8;i++)
cout<<f[b][i]<<" ";
cout<<f[b][8]<<endl;
}
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: