MLE求助
查看原帖
MLE求助
1476680
chengyanyi楼主2025/6/14 11:28

测试点里只3个AC,其他都是MLE

#include <bits/stdc++.h>
using namespace std;
struct sk{
    string s;
    int step;
};
string n;
int g=3;
queue<sk> q;
string ss(string x,int f,int a){
    if(f==1){//上
        if(a/3==0){
            return x;
        }
        else{
            char s1;
            s1=x[a];
            x[a]=x[a-g];
            x[a-g]=s1;
        }
        return x;
    }
    if(f==2){//下
        if(a/3==g-1){
            return x;
        }
        else{
            char s1;
            s1=x[a];
            x[a]=x[a+g];
            x[a+g]=s1;
        }
        return x;
    }
    if(f==3){//左
        if(a%3==0){
            return x;
        }
        else{
            char s1;
            s1=x[a];
            x[a]=x[a-1];
            x[a-1]=s1;
        }
        return x;
    }
    if(f==4){//右
        if(a%3==g-1){
            return x;
        }
        else{
            char s1;
            s1=x[a];
            x[a]=x[a+1];
            x[a+1]=s1;
        }
        return x;
    }
}
int main() {
    cin>>n;
    q.push({n,0});
    while(!q.empty()){
        sk sum=q.front();
        string m=sum.s;
        q.pop();
        if(m=="123804765"){
            cout<<sum.step;
            return 0;
        }
        int a=-1;
        for(int i=0;i<g*g;i++){
            if(m[i]=='0'){
                a=i;
                break;
            }
        }
        for(int i=1;i<=4;i++){
            m=ss(m,i,a);
            if(m!=sum.s){
                q.push({m,sum.step+1});
            }
            m=sum.s;
        }
    }
    return 0;
}
2025/6/14 11:28
加载中...