10分求调 全是WA QwQ
查看原帖
10分求调 全是WA QwQ
737833
orson111楼主2023/9/29 13:56

求助QwQ

#include<bits/stdc++.h>
using namespace std;
struct Node{string s;int steps;};
string S;
map<string,bool> vst;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int bfs(){
    if(S=="123804765") return 0;
    queue<Node> q;
    q.push((Node){S,0});
    vst[S]=1;
    while(q.size()){
        Node u=q.front(); q.pop();
        int x,y;
        for(int i=0;i<9;i++)
            if(u.s[i]=='0') x=i/3,y=i%3;
        Node v=(Node){u.s,u.steps+1};
        for(int i=0;i<4;i++){
            int nx=x+dx[i],ny=y+dy[i];
            if(nx<0||ny<0||nx>2||ny>2) continue;
            swap(v.s[x*3+y],v.s[nx*3+ny]);
            if(vst[v.s]) continue;
            if(v.s=="123804765") return v.steps;
            q.push(v);
            vst[v.s]=1;
            swap(v.s[x*3+y],v.s[nx*3+ny]);
        }
    }
    return -1;
}
int main(){
    cin>>S;
    cout<<bfs()<<endl;
    return 0;
}
2023/9/29 13:56
加载中...