97分,12WA,求助
查看原帖
97分,12WA,求助
1316826
hpugaoshu楼主2024/7/26 19:47
#include <bits/stdc++.h>
using namespace std;
string r="123804765";
struct node{
	string s;
	int step,pos;
	bool operator()(node a,node b){
		int sa=0,sb=0;
		for(int i=0;i<9;i++){
			if(a.s[i]!=r[i]) sa++;
			if(b.s[i]!=r[i]) sb++;
		}
		return a.step+sa>b.step+sb;
	}
}x,y;
map<string,bool> m;
void dfs(node x){
    if(x.s==r) {cout<<x.step;return;}
	priority_queue<node,vector<node>,node> q;
	m[x.s]=1;
	q.push(x);
	int f[4]={-3,1,3,-1};
	while(!q.empty()){
		x=y=q.top();
		q.pop();
		for(int i=0;i<4;i++){
			if(x.pos+f[i]<0||x.pos+f[i]>8)continue;
			if(x.pos%3==2&&i==1)continue;
			if(x.pos%3==0&&i==3)continue;
			swap(x.s[x.pos],x.s[x.pos+f[i]]);
			if(!m[x.s]){
				if(x.s==r){
					cout<<x.step+1;
					return;
				}
				x.pos=x.pos+f[i];
				m[x.s]=1;
				x.step++;
				q.push(x);
			}
			x=y;
		}
	}
	return;
}
int main(){
	cin>>x.s;
	x.step=0;
	x.pos=x.s.find('0');
	dfs(x);
	return 0;
}
2024/7/26 19:47
加载中...