RE求助QwQ
查看原帖
RE求助QwQ
511268
PIKA_PIKA楼主2021/8/10 09:37
#include<bits/stdc++.h>
using namespace std;
string start;
long long bfs(string st){
    string end = "123804765";
    
    queue<string> q;
    unordered_map<string,long long> d;
    
    q.push(start);
    d[start] = 0;
    while(!q.empty()){
        string t=q.front();
        q.pop();
        long long dist = d[t];
        if(t == end) return dist;
        long long k=t.find('x');
        long long x = k/3,y = k%3;
        long long dx[4] = {0,1,0,-1},dy[4] ={1,0,-1,0};
        for(long long i=0;i<4;i++){
            long long a= x+dx[i],b= y+dy[i];
            if(a>=0 && a<3 && b>=0 && b<3){
                swap(t[a*3+b],t[k]);
                
                if(!d.count(t)){
                    d[t] = dist+1;
                    q.push(t);
                }
                
                swap(t[a*3+b],t[k]);
            }
        }
    }
    return -1;
}
int main(){
    cin>>start;
    
    cout<<bfs(start);
}
2021/8/10 09:37
加载中...