板子广搜求助
查看原帖
板子广搜求助
654958
Light_az楼主2023/3/23 14:11
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2="123804765";
ll dx[5]={0,1,-1,0,0};
ll dy[5]={0,0,0,-1,1};
struct Node{
	string s;
	ll dep;
};
map<string,bool> vis;
ll bfs(){
	queue<Node> q;
	q.push({s1,0});
	vis[s1]=1;
	while(!q.empty()){
		Node p=q.front();
		q.pop();
		if(p.s==s2) return p.dep;
		ll id=p.s.find("0");
		F(i,1,4){
			ll nx=id/3+dx[i],ny=id%3+dy[i];
			if(nx>=0&&nx<2&&ny>=0&&nx<2){
				string s=p.s;
				swap(s[id],s[nx*3+ny]);
				if(!vis[s]) vis[s]=1,q.push({s,p.dep+1});
			}		
		}
	}
	return 0;
}
int main(){
	cin>>s1;
	cout<<bfs();
	return 0;
}

值得一提的是,更难的 马农骑士精神都过了,广搜板子竟然还错了。

2023/3/23 14:11
加载中...