UVALive 6124 Hexagon Perplexagon

来源:互联网 发布:java 高级编程 书籍 编辑:程序博客网 时间:2024/06/05 21:32

直接进行搜索即可,注意细节。 有更简便的写法但怕出错所以写得很长。


#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<vector>using namespace std;struct node{    int a[6];}he[7];bool flag;int ans[10];int tun[10];bool vis[10];void dfs(int pos){    if(flag)return ;    //cout<<pos<<endl;    if(pos==7)    {        flag=1;        return ;    }    if(pos==1)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            //cout<<"kk"<<endl;            for(int j=0;j<6;j++)            {                //cout<<he[i].a[j]<<endl;                if(he[i].a[j]==1)                {                    tun[i]=(j-3+6)%6;                    vis[i]=1;                    ans[pos]=i;                    dfs(pos+1);                    vis[i]=0;                    break;                }            }        }    }    if(pos==2)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            for(int j=0;j<6;j++)            {                if(he[i].a[j]==he[ans[0]].a[(tun[ans[0]]+1)%6]&&he[i].a[(j+1)%6]==he[ans[1]].a[(tun[ans[1]]+2)%6])                {                    tun[i]=(j-4+6)%6;                    ans[pos]=i;                    vis[i]=1;                    dfs(pos+1);                    vis[i]=0; break;                }            }        }    }    if(pos==3)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            for(int j=0;j<6;j++)            {                if(he[i].a[j]==he[ans[0]].a[(tun[ans[0]]+2)%6]&&he[i].a[(j+1)%6]==he[ans[2]].a[(tun[ans[2]]+3)%6])                {                    tun[i]=(j-5+6)%6;                    ans[pos]=i;                    vis[i]=1;                    dfs(pos+1);                    vis[i]=0;break;                }            }        }    }    if(pos==4)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            for(int j=0;j<6;j++)            {                if(he[i].a[j]==he[ans[0]].a[(tun[ans[0]]+3)%6]&&he[i].a[(j+1)%6]==he[ans[3]].a[(tun[ans[3]]+4)%6])                {                    tun[i]=(j-6+6)%6;                    ans[pos]=i;                    vis[i]=1;                    dfs(pos+1);                    vis[i]=0;break;                }            }        }    }    if(pos==5)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            for(int j=0;j<6;j++)            {                if(he[i].a[j]==he[ans[0]].a[(tun[ans[0]]+4)%6]&&he[i].a[(j+1)%6]==he[ans[4]].a[(tun[ans[4]]+5)%6])                {                    tun[i]=(j-1+6)%6;                    ans[pos]=i;                    vis[i]=1;                    dfs(pos+1);                    vis[i]=0; break;                }            }        }    }    if(pos==6)    {        for(int i=0;i<7;i++)        {            if(flag)return ;if(vis[i]) continue;            for(int j=0;j<6;j++)            {                if(he[i].a[(j-1+6)%6]==he[ans[1]].a[(tun[ans[1]]+4)%6]&&he[i].a[j]==he[ans[0]].a[(tun[ans[0]]+5)%6]&&he[i].a[(j+1)%6]==he[ans[5]].a[(tun[ans[5]]+6)%6])                {                    tun[i]=(j-2+6)%6;                    ans[pos]=i;                    vis[i]=1;                    dfs(pos+1);                    vis[i]=0; break;                }            }        }    }}int main(){    int n;    int t;    scanf("%d",&t);    for(int cas=1;cas<=t;cas++)    {        flag=0;        memset(vis,0,sizeof(vis));        for(int i=0;i<7;i++)        {            for(int j=0;j<6;j++)            {                  scanf("%d",&he[i].a[j]);            }        }        ///qidian        for(int i=0;i<7;i++)        {            if(flag) break;            for(int j=0;j<6;j++)            {                if(he[i].a[j]==1)                {                    tun[i]=j;                    vis[i]=1;                    ans[0]=i;                    dfs(1);                    vis[i]=0;                    break;                }            }        }        printf("Case %d:",cas);        if(flag==0)puts(" No solution");        else        {            for(int i=0;i<7;i++)            {                printf(" %d",ans[i]);            }            puts("");        }    }}


0 0