汉诺塔
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char b,char c)
{
if(n==1){
cout<<n<<' '<<a<<" "<<c<<endl;
}
else{
hanoi(n-1,a,c,b);
cout<<n<<" "<<a<<" "<<c<<endl;
hanoi(n-1,b,a,c);
}
}
int main(){
int n;
cin>>n;
hanoi(n,'A','B','C');
return 0;
}
下面我用图来描述64个盘子的转移流程
看图偷来的
这里我们先把上方的63个盘子看成整体,这下就等于只有两个盘子,自然很容易了,我们只要完成两个盘子的转移就行了,好了现在我们先不管第64个盘子,假设a柱只有63个盘子,与之前一样的解决方式,前62个盘子先完成移动目标。
过河
二分
#include<bits/stdc++.h>
using namespace std;
int mark[100];
int num[200];
int r,n,cnt;
void print()
{
cnt++;
for(int i=1;i<=r;i++)
{
cout<<num[i];
}
cout<<endl;
}
void search(int x)
{
for(int i=1;i<=n;i++)
{
if(!mark[i])
{
mark[i]=1;
num[x]=i;
if(x==r) print();
search(x+1);
mark[i]=0;
}
}
}
int main(){
cin>>n>>r;
search(1);
cout<<endl<<endl<<cnt;
return 0;
}