文章

11

粉丝

406

获赞

3

访问

79.5k

头像
DFS or BFS
P1420 清华大学机试题
发布于2022年3月10日 15:06
阅读数 3.8k

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<unordered_map>
using namespace std;

int n,limit,mm;
string s,a="2012";
unordered_map<string,int> m;

void backtrack(int k){
    if(k>limit)return;
    // printf("li-%d;",k);
    if(s.find(a)!=string::npos){
        mm=(k<mm)?k:mm;
        return;
    }
    for(int i=0;i<=n-2;++i){
        swap(s[i],s[i+1]);
        if(!m.count(s)||m[s]>k+1){
            backtrack(k+1);
            m[s]=k+1;
        }
        swap(s[i],s[i+1]);
    }
}

int main(){
    while(cin>>n){
        cin>>s;
        // limit=n*(n-1)/2;
        limit=7;
        mm=n*n;
        m.clear();
        m[s]=0;
        backtrack(0);
        (mm==n*n)?printf("%d\n",-1):printf("%d\n",mm);
    }
    return 0;
}


#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<unordered_map>
#include<queue>
using namespace std;
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发