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); } }