BFS爆搜,25分求调
查看原帖
BFS爆搜,25分求调
615438
jpjpjpjp楼主2024/7/13 08:04
#include<iostream>
#include<queue>
#include<map>
using namespace std;
int ad[4]={-3,-1,+1,+3};
struct mapp
{
	int sk,step;
	string mp;
}srt,ed;
map<string,bool> vist;
bool check(mapp x)
{
	return x.mp==ed.mp;
}
queue<mapp> t;
void bfs()
{
	while(!t.empty())
	{
		mapp u= t.front();
		t.pop();
		if(vist[u.mp])continue;
		vist[u.mp]=1;
		if(check(u))
		{
			cout<<u.step;
			return;
		}
		for(int i=0;i<4;i++)
		{
			int vk=u.sk+ad[i];
			if(vk<1||vk>9)continue;
			mapp v=u;
			swap(v.mp[u.sk],v.mp[vk]);
			v.sk=vk;
			v.step=u.step+1;
			t.push(v);
		}
	}
}
int main()
{
	cin>>srt.mp;
	srt.mp=' '+srt.mp;
	ed.mp=" 123804765";
	for(int i=1;i<=9;i++)
	{
		if(srt.mp[i]=='0')
		{
			srt.sk=i;
			break;
		}
	}
	ed.sk=5;
	srt.step=0;
	t.push(srt);
	bfs();
	return 0;
 } 
2024/7/13 08:04
加载中...