luogu1242 新汉诺塔

就是一步一步把大的往目标地放。

#include <iostream>
#include <cstdio>
using namespace std;
int fro[55], too[55], cnt, uu, n, ans=0;
void dfs(int x, int qu){
	if(fro[x]==qu)	return ;
	for(int i=x-1; i>=1; i--)
		dfs(i, 6-qu-fro[x]);//大的已经归位了,只有小的会阻碍。
	printf("move %d from %c to %c
", x, fro[x]+'A'-1, qu+'A'-1);
	fro[x] = qu;
	ans++;
}
int main(){
	cin>>n;
	for(int i=1; i<=3; i++){
		scanf("%d", &cnt);
		for(int j=1; j<=cnt; j++){
			scanf("%d", &uu);
			fro[uu] = i;
		}
	}
	for(int i=1; i<=3; i++){
		scanf("%d", &cnt);
		for(int j=1; j<=cnt; j++){
			scanf("%d", &uu);
			too[uu] = i;
		}
	}
	for(int i=n; i>=1; i--)	dfs(i, too[i]);
	cout<<ans<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/poorpool/p/8067865.html