样例输入:
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;
}
下一篇:二进制子集