hdu5012 bfs

比较简单的题 搜索4个方向,维护位子的值。

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int a[10],b[10];
int vis[10][10][10][10][10][10];
struct node
{
    int x1,x2,x3,x4,x5,x6,step;
};
int bfs()
{
    queue<node>q;
    node temp;
    temp.x1=a[1];temp.x2=a[2];temp.x3=a[3];temp.x4=a[4];temp.x5=a[5];temp.x6=a[6];temp.step=0;
    q.push(temp);
    while(!q.empty())
    {
        int i;
        node tt;
        tt=q.front();
        q.pop();
        if(tt.x1==b[1]&&tt.x2==b[2]&&tt.x3==b[3]&&tt.x4==b[4]&&tt.x5==b[5]&&tt.x6==b[6])
            return tt.step;
        for(i=1;i<=4;i++)
        {
            node ret;
            if(i==1){//left
                ret.x1=tt.x4;ret.x2=tt.x3;ret.x3=tt.x1;
                ret.x4=tt.x2;ret.x5=tt.x5;ret.x6=tt.x6;
            }
            else if(i==2){//right
                ret.x1=tt.x3;ret.x2=tt.x4;ret.x3=tt.x2;
                ret.x4=tt.x1;ret.x5=tt.x5;ret.x6=tt.x6;
            }
            else if(i==3){//front
                ret.x1=tt.x6;ret.x2=tt.x5;ret.x3=tt.x3;
                ret.x4=tt.x4;ret.x5=tt.x1;ret.x6=tt.x2;
            }
            else if(i==4){//back
                ret.x1=tt.x5;ret.x2=tt.x6;ret.x3=tt.x3;
                ret.x4=tt.x4;ret.x5=tt.x2;ret.x6=tt.x1;;
            }
            if(!vis[ret.x1][ret.x2][ret.x3][ret.x4][ret.x5][ret.x6])
            {
                vis[ret.x1][ret.x2][ret.x3][ret.x4][ret.x5][ret.x6]=1;
                ret.step=tt.step+1;
                q.push(ret);
            }
        }
    }
    return -1;
}
int main()
{
    int i,j;
    while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])!=EOF)
    {
        for(i=1;i<=6;i++)
            scanf("%d",&b[i]);



        for(i=1;i<=6;i++)
            for(j=1;j<=6;j++)
                for(int k=1;k<=6;k++)
                    for(int f=1;f<=6;f++)
                        for(int g=1;g<=6;g++)
                            for(int h=1;h<=6;h++)
                                vis[i][j][k][f][g][h]=0;
        int ans=bfs();
        if(ans==-1)
            printf("-1\n");
        else printf("%d\n",ans);
    }
}

 

posted @ 2015-07-28 10:52  sweat123  阅读(268)  评论(0编辑  收藏  举报