代码应该是正确的,已经把map改成用数组了,求dalao帮忙优化,感激不尽
#include <bits/stdc++.h>
using namespace std;
struct node{
string now;
int step , pos;
};
string s , t;
int vis[6][1000010];
int id(string x){
int sum = 0;
sum += (x[0] - '0') * 100000;
sum += (x[1] - '0') * 10000;
sum += (x[2] - '0') * 1000;
sum += (x[3] - '0') * 100;
sum += (x[4] - '0') * 10;
sum += (x[5] - '0') * 1;
return sum;
}
int main(){
cin >> s >> t;
queue<node> q;
q.push((node){s , 0 , 0});
while(!q.empty()){
string no = q.front().now;
int st = q.front().step , po = q.front().pos;
q.pop();
if(vis[po][id(no)]) continue;
vis[po][id(no)] = 1;
if(no == t){
cout << st;
return 0;
}
string change;
int p1 , p2;
//swap0
p1 = 0 , p2 = po;
change = no;
swap(change[p1] , change[p2]);
q.push((node){change , st + 1 , po});
//swap1
p1 = 5 , p2 = po;
change = no;
swap(change[p1] , change[p2]);
q.push((node){change , st + 1 , po});
//up
change = no;
if(change[po] != '9'){
change[po]++;
q.push((node){change , st + 1 , po});
}
//down
change = no;
if(change[po] != '0'){
change[po]--;
q.push((node){change , st + 1 , po});
}
//left
if(po != 0) q.push((node){no , st + 1 , po - 1});
//right
if(po != 5) q.push((node){no , st + 1 , po + 1});
}
return 0;
}