《基础算法递归-----汉诺塔问题》
汉诺塔问题
一系类算法比赛临近了,博主也要开始备战了,笔者的算法其实也不是很好希望通过博客来记录自己的学习过程,加油
题目难度:洛谷橙色,黄题的难度。
一.问题描述
题目链接汉诺塔
二.算法原理:
重复子问题:
1.先把最后一个的上面n - 1个盘子放到辅助柱子上
2.把最后一个放到最终柱子上
3.把 n - 1个放到最终柱子上
三.代码:
#include <iostream>
using namespace std;
void dfs(int n, char x, char y, char z)
{if (n == 0)return;dfs(n - 1, x, z, y);printf("%c->%d->%c\n", x, n, z);dfs(n - 1, y, x, z);}
int main()
{int n;char a, b, c;cin >> n >> a >> b >> c;dfs(n, a, c, b);return 0;
}
运行结果: