
样例输入:
cococala
 
样例输出:
1
 
思路分析:
这道题的 n n n是 8 8 8,所以可以无脑 d f s dfs dfs,那就变得非常简单了。
代码 (注释详解) :
#include<iostream>
using namespace std;
char t[10]={'0','c','o','c','a','c','o','l','a'},a[10];//c数组目标答案,a数组表示输入数组
int ans=50;
void dfs(int x,int res){//x表示下标,res表示操作次数
	if(x==8){//如果下标等于8,求最小值
		ans=min(ans,res);
	}
	if(a[x]==t[x]){//如果与原数组一样,就不用交换
		dfs(x+1,res);
		return;
	}
	for(int i=x;i<=8;i++){
		if(a[i]==t[x]){
			swap(a[i],a[x]);//交换
			dfs(x+1,res+1);//递归
			swap(a[i],a[x]);//回溯
		}
	}
	return;
}
int main(){
	for(int i=1;i<=8;i++){
		cin>>a[i];
	}
	dfs(1,0);//下标为1,交换0次
	cout<<ans;
	return 0;
}
 
下一篇:二进制子集


















