- 2
- 0
- 约3.13千字
- 约 5页
- 2017-09-02 发布于浙江
- 举报
用非递归方式实现汉罗塔源代码
/*
算法描述:
要达到目的效果,只需满足
1,:奇数次移动时将最小盘子顺时针移动一下。
2:偶数次移动时将最小盘子不在的两根塔柱上的较小盘子移到另一根塔柱上。
原创 By 木全
*/
#includestdio.h
#includemalloc.h
#includetime.h
bool Isodd(int i); //判断i是否为奇数,是奇数返回true,否则返回false;
bool Is_on_one_post(int** d,int n); //判断三个柱子中,是否有一根柱子已经满足移动效果了,假如满足返回ture;
int findmin(int** d,int post,int n); //得到柱子号为post的柱子的最上面的盘子的编号;
bool Isodd(int i)//函数实现部分;
{
if(i%2==1)
return true;
else
return false;
}
bool Is_on_one_post(int** d,int n)
{
int k=0;
bool post0,post1,post2;//分别有三根柱子;
post0 = true;
post1 = true;
post2 = true;
for(k=0;kn-1;k++) //用三个循环分别判断三根柱子上是否满足移动最终结果;
{
if(d[k+1][0]!=d[k][0]+1)
{
post0 = false;
break;
}
}
for(k=0;kn-1;k++)
{
if(d[k+1][1]!=d[k][1]+1)
{
post1 = false;
break;
}
}
for(k=0;kn-1;k++)
{
if(d[k+1][2]!=d[k][2]+1)
{
post2 = false;
break;
}
}
if(post0 || post1 || post2) //任一存在一根柱子满足,则返回真;
return true;
else
return false;
}
int findmin(int** d,int post,int n)
{
int k=0;
for(k=0;kn;k++)
if(d[k][post]!=0) return k; //找到第post号柱子上的最上面的盘子编号;并返回
return -1; //假如柱子为空,则返回-1;
}
int main()
{
int **d;
int step,min,n,i;
clock_t start, finish;
double duration;
printf(Input the number of dishs!\n);
scanf(%d,n);
start = clock(); // 开始计算时间;
d = (int**)malloc(n*sizeof(int*));
for(i=0;in;i++)
d[i] = (int*)malloc(3*sizeof(int)); // 动态分配一个二维数组,行数为盘子数,列数为柱子数;
for(i=0;in;i++) // 对二维数组初始化,将所有盘子放在第0跟柱子上,然后其他两跟柱子上全清零;
{
d[i][0] = i+1;
d[i][1] = 0;
d[i][2] = 0;
}
step = 1;
min =0;
d[0][min+1] = d[0][min]; //第一次移动盘子,将0号柱子上的1号盘子移到1号柱上;
d[0][min] = 0; // 移动完后立即清零,方便以后判断柱子是否为满足最终移动条件;
printf(%d post --- %d post!\n,min,min+1); //从此以后,每移动一次,就得打印一次;
step++;
min++;
while(!Is_on_one_post(d,n)) //以下才是本程序的重点,慢慢判断,慢慢输出;
{
if(Isodd(step)) //如果是第奇数次移动;只需将最小盘子顺时针移动一个;
{
d[0][(min+1)%3] = d[0][min%3];
d[0][min%3] = 0;
printf(%d post --- %d post!\n,min%3,(min+1)%3);
min++; //min就是最小盘子所在柱子的编号;
}
else // 当为偶数次移动时;
{
int lay1,lay2;
lay1 = findmin(d,(min-1)%3
您可能关注的文档
最近下载
- RB308A-rev1.7-晶准-恒佳盛一级代理.pdf VIP
- 小学奥数 较复杂的乘法原理.pdf VIP
- 2024年陕西省中考数学真题(学生版+解析版).docx
- 小学奥数 加乘法原理.docx VIP
- 2025烟台南山学院单招《数学》复习提分资料(含答案详解).docx VIP
- 湖南省湘一名校2026届高三上学期12月质量检测物理试卷(含答案).pdf VIP
- 2025年上海高考数学二轮复习:热点题型4 统计与概率(六大题型)原卷版+解析.pdf VIP
- WordExcel2010中文版办公专家从入门到精通.pdf VIP
- 新教材人教A版高中数学选择性必修第三册习题答案.docx VIP
- 专题08 古诗鉴赏(解析版)备战2024年中考语文真题题源解密(全国通用.docx VIP
原创力文档

文档评论(0)