这道题加深了hanio的理解
如果我们要移动第n个盘子。那么就是说,n+1以后(包括n+1)的盘子都已经到位了
#include#include using namespace std;int no[4];int ai[4];int aim[50];int pla[50];long long ans;void move(int num,int f,int t){ ans+=1; printf("move %d from %c to %c\n",num,f+'A'-1,t+'A'-1); pla[num]=t; return ;}void dfs(int num,int from,int to,int pass){ if(from==to) return ; for(int i=num-1;i>=1;i--) dfs(i,pla[i],pass,6-pla[i]-pass); move(num,from,to); return ;}int main(){ int n; scanf("%d",&n); int pass; for(int i=1;i<=3;i++) { scanf("%d",&no[i]); for(int j=1;j<=no[i];j++) { scanf("%d",&pass); pla[pass]=i; } } for(int i=1;i<=3;i++) { scanf("%d",&ai[i]); for(int j=1;j<=ai[i];j++) { scanf("%d",&pass); aim[pass]=i; } } for(int i=n;i>=1;i--) dfs(i,pla[i],aim[i],6-pla[i]-aim[i]); printf("%lld",ans); return 0;}