1. 程式人生 > >P1242 新漢諾塔

P1242 新漢諾塔

blog int spa body name 如果 += tdi esp

這道題加深了hanio的理解

如果我們要移動第n個盤子。那麽就是說,n+1以後(包括n+1)的盤子都已經到位了


#include<iostream> 
#include<cstdio>
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; }

P1242 新漢諾塔