求修改
查看原帖
求修改
1269144
depth_first_search_楼主2024/7/19 15:42
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
int f[N],g[N],cnt,x,n,m;
char ch[3]={'A','B','C'};
void move(int x,int a,int b){
	printf("move %d from %c to %c\n",x,ch[a],ch[b]);
	f[x]=b,++cnt;
	return;
}
void sovle(int n,int C,int b){//b为1,表示将1~n移往目的状态 
	if(n==0)return;
	int tar=b?C:g[n];
	if(tar==f[n])sovle(n-1,C,b);
	else{
		int B=0;
		while(B==f[n]||B==tar)++B;
		sovle(n-1,B,1);
		move(n,f[n],tar);
		sovle(n-1,C,b);
	}
	return;
}
int main(){
	cin>>n;
	for(int i=0;i<3;i++){
		cin>>m;
		for(int j=0;j<m;++j){
			cin>>x,g[x]=i;
		}
	}
	sovle(n,0,0);
	cout<<cnt; 
	return 0;
}

2024/7/19 15:42
加载中...