- 汉诺塔问题 move 1 from A to B
- 2024-07-29 14:23:32 @
#include <bits/stdc++.h>
using namespace std;
int first[50],last[50],ans;
void hanoi(int x,int y){
if(first[x]==y)return ;
for(int l=x-1;l>0;l--)
hanoi(l,6-first[x]-y);
printf("move %d from %c to %c\n",x,first[x]+'A'-1,y+'A'-1);
first[x]=y;
ans++;
}
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=3;i++){
int x,m;
cin>>m;
for(int j=1;j<=m;j++)cin>>x,first[x]=i;
}
for(int i=1;i<=3;i++){
int x,m;
cin>>m;
for(int j=1;j<=m;j++)cin>>x,last[x]=i;
}
for(int i=n;i>0;i--)hanoi(i,last[i]);
cout<<ans;
return 0;
}
1 条评论
-
Infinity_ LV 8 @ 2024-08-02 11:24:56
原版的汉诺塔问题是有通解的,但是这道题我就不知道了
- 1
信息
- ID
- 1548
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 26
- 已通过
- 10
- 通过率
- 38%
- 被复制
- 2
- 上传者