hdu(1997) 汉诺塔VII
来源:互联网 发布:完美国际数据库 编辑:程序博客网 时间:2024/06/03 19:14
若把n个盘子从柱子a通过柱子b移到柱子c,则先把n-1个盘子从柱子a移动柱子b,再把第n个盘子从a移道c,再把n-1个盘子从b移到a。
所以当判断序列是否符合把n个盘子从a移到c时,第n个只能出现在柱子a的最底部,或柱子c的最底部,否则这个序列错的。
当第n个盘子在a的最底部时,则继续判断剩下的序列是否把n-1个盘子从a移到b。
当第n个盘子在c的最底部时,则继续判断剩下的序列是否把n-1个盘子从b移到c。
#include"stdio.h"
#include"string.h"
int map[1000];
int bfs(int n,int a,int b,int c)
{
if(n<=0)//能移完表示全对;
return 1;
if(map[n]==a)//如果最大的一个在a的底部,看是否将n-1个从a移动到b柱上。
{
bfs(n-1,a,c,b);
}
else if(map[n]==b)//如果最大的在b柱上出现过,则出现了错误。
return 0;
else if(map[n]==c)//如果最大的在c柱上,看是否能将n-1个从b柱移动到c柱上。
{
bfs(n-1,b,a,c);
}
}
int main()
{
int n,m,i,j,k,h;
scanf("%d",&k);
while(k--)
{
memset(map,0,sizeof(map));
scanf("%d",&n);
for(i=1;i<=3;i++)
{
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%d",&h);
map[h]=i;
}
}
if(bfs(n,1,2,3))//123代表abc三根柱子;
printf("true\n");
else
printf("false\n");
}
return 0;
}
- hdu(1997) 汉诺塔VII
- HDU 1997 - 汉诺塔VII
- HDU 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- HDU 1997汉诺塔VII
- hdu 1997 汉诺塔VII
- HDU 1997 汉诺塔VII
- HDU 1997 汉诺塔VII
- HDU 1997 汉诺塔VII
- HDU 1997 汉诺塔VII
- HDU 1997 汉诺塔VII
- HDU:1997 汉诺塔VII(规律||递归)
- HDU 1997 汉诺塔VII (模拟)
- hdu 1997 汉诺塔VII (DFS)
- hdu 1997 汉诺塔VII(递归)
- 初探WCF
- VS2008加载包失败的解决方法
- TCHAR 与const wchar_t *等的转换
- nginx root 403 问题
- ROS(groovy)移植到beagleboneblack 上完整过程
- hdu(1997) 汉诺塔VII
- 枚举窗口列表中的所有父窗口(顶级和被所有窗口)
- ClientToScreen这个函数的功能:该函数将指定点,或者矩形的用户坐标转换成屏幕坐标。
- const char*、char*及字符串常量的正确使用
- 寻找数组中频率超过一半的数字
- Jquery网页打印
- Activity切换时保存数据的方法
- 局部二值模式LBP(Local Binary Pattern)实现代码
- jQuery 遍历 - map() 方法