求助 36分 本来T的吸完氧M了
查看原帖
求助 36分 本来T的吸完氧M了
117662
那一条变阻器楼主2020/7/27 20:10

代码应该是正确的,已经把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;
}
2020/7/27 20:10
加载中...