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);
}
}
题意:就是说有两个骰子,让你通过四种变换方式能不能似的第一个筛子和第二个筛子完全一样,如果可以,输出步数,否则输出-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);
}
}
相关文章推荐
- hdu 5012 Dice
- hdu 5012 Dice
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
- Dice - HDU 5012 搜索
- hdu 5012__Dice
- HDU 5012 Dice (bfs)
- bfs-HDU 5012Dice
- HDU-#5012 Dice(BFS)
- hdu5012 Dice
- hdu5012 Dice(分治限界法)
- hdu 5012 Dice BFS 2014 ACM/ICPC Asia Regional Xi'an Online
- 【搜索】 HDU 5012 Dice
- BFS + 剪枝 之 hdu 5012 Dice
- hdu 5012——Dice
- 【搜索】 HDU 5012 Dice
- BFS + 剪枝 之 hdu 5012 Dice
- HDU 5012 Dice (BFS)
- HDU 5012 Dice bfs
- HDU5012 Dice
- HDU 5012-Dice(BFS)