您的位置:首页 > 其它

hdu 5012 dice

2014-09-15 12:58 281 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5012

题意:就是说有两个骰子,让你通过四种变换方式能不能似的第一个筛子和第二个筛子完全一样,如果可以,输出步数,否则输出-1;

思路:就是无脑暴搜就好,但是当时居然没有想到使用visit[],在想着怎么直接判断。#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int a[100];
int v[7][7][7][7][7][7];
struct node
{
int a1,a2,a3,a4,a5,a6;
int step;
};
int judge(node x,node y)
{
if(x.a1==y.a1&&x.a2==y.a2&&x.a3==y.a3&&x.a4==y.a4&&x.a5==y.a5&&x.a6==y.a6)
return 1;
else
return 0;
}
node fan(node cur,int x)
{
node tmp;
if(x==0)
{
tmp.a1=cur.a4;
tmp.a2=cur.a3;
tmp.a3=cur.a1;
tmp.a4=cur.a2;
tmp.a5=cur.a5;
tmp.a6=cur.a6;
}else
if(x==1)
{
tmp.a1=cur.a3;
tmp.a2=cur.a4;
tmp.a3=cur.a2;
tmp.a4=cur.a1;
tmp.a5=cur.a5;
tmp.a6=cur.a6;
}
else
if(x==2)
{
tmp.a1=cur.a6;
tmp.a2=cur.a5;
tmp.a3=cur.a3;
tmp.a4=cur.a4;
tmp.a5=cur.a1;
tmp.a6=cur.a2;
}
else
{
tmp.a1=cur.a5;
tmp.a2=cur.a6;
tmp.a3=cur.a3;
tmp.a4=cur.a4;
tmp.a5=cur.a2;
tmp.a6=cur.a1;
}
return tmp;
}
int bfs(node now,node mu)
{
node cur,next;
memset(v,0,sizeof(v));
cur=now;
cur.step=0;
v[cur.a1][cur.a2][cur.a3][cur.a4][cur.a5][cur.a6]=1;
queue<node>q;
q.push(cur);
int i;
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.step>99)
return -1;
if(judge(cur,mu))
{
return cur.step;
}
for(i=0;i<4;i++)
{
next=fan(cur,i);
if(v[next.a1][next.a2][next.a3][next.a4][next.a5][next.a6]==0)
{
v[next.a1][next.a2][next.a3][next.a4][next.a5][next.a6]=1;
next.step=cur.step+1;
q.push(next);
}

}
}
return -1;
}
int main()
{
node x,y;
while(scanf("%d%d%d%d%d%d%d%d%d%d%d%d",&x.a1,&x.a2,&x.a3,
&x.a4,&x.a5,&x.a6,&y.a1,&y.a2,&y.a3,&y.a4,&y.a5,&y.a6)!=EOF)
{
int flag,i;

int ans=bfs(x,y);
printf("%d\n",ans);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: