本文主要是介绍hdu 5012 2014西安网络赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当时手一残,有点小bug,被其他队的先a了。哎。
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<queue>
using namespace std;
int a[7],b[7];
bool visit[7][7][7][7][7][7];int bfs()
{queue<int> q[6];queue<int> step;int c[6];step.push(0);for(int i=0; i<6; i++){q[i].push(b[i]);}visit[b[0]][b[1]][b[2]][b[3]][b[4]][b[5]]=true;while(!q[1].empty()){for(int i=0; i<6; i++){c[i]=q[i].front();}int t=step.front();bool flag=true;for(int i=0; i<6; i++){if(c[i]!=a[i])flag=false;}if(flag)return t;if(!visit[c[3]][c[2]][c[0]][c[1]][c[4]][c[5]]) //left{step.push(t+1);q[0].push(c[3]);q[1].push(c[2]);q[2].push(c[0]);q[3].push(c[1]);q[4].push(c[4]);q[5].push(c[5]);visit[c[3]][c[2]][c[0]][c[1]][c[4]][c[5]]=true;}// cout<<step.front()<<endl;if(!visit[c[2]][c[3]][c[1]][c[0]][c[4]][c[5]]) //right{step.push(t+1);q[0].push(c[2]);q[1].push(c[3]);q[2].push(c[1]);q[3].push(c[0]);q[4].push(c[4]);q[5].push(c[5]);visit[c[2]][c[3]][c[1]][c[0]][c[4]][c[5]]=true;}//cout<<"2"<<endl;if(!visit[c[5]][c[4]][c[2]][c[3]][c[0]][c[1]]) //back{step.push(t+1);q[0].push(c[5]);q[1].push(c[4]);q[2].push(c[2]);q[3].push(c[3]);q[4].push(c[0]);q[5].push(c[1]);visit[c[5]][c[4]][c[2]][c[3]][c[0]][c[1]]=true;}//cout<<"3"<<endl;if(!visit[c[4]][c[5]][c[2]][c[3]][c[1]][c[0]]) //front{step.push(t+1);q[0].push(c[4]);q[1].push(c[5]);q[2].push(c[2]);q[3].push(c[3]);q[4].push(c[1]);q[5].push(c[0]);visit[c[4]][c[5]][c[2]][c[3]][c[1]][c[0]]=true;}// cout<<"4"<<endl;for(int i=0; i<6; i++){q[i].pop();}step.pop();}return -1;}
int main()
{while(~scanf("%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5])){memset(visit,false,sizeof(visit));for(int i=0; i<6; i++)scanf("%d",&b[i]);int count=0;for(int i=0; i<3; i++)// 剪枝{int a1=a[i*2],a2=a[i*2+1];for(int j=0; j<3; j++){int b1=b[j*2],b2=b[j*2+1];if( (a1==b1&&a2==b2) || (a1==b2)&& (a2==b1) )count++;}}// cout<<count<<endl;if(count!=3){cout<<"-1"<<endl;continue;}cout<<bfs()<<endl;}return 0;
}
这篇关于hdu 5012 2014西安网络赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!