我67,空间不够bfs不知如何优化求助大佬!!!
查看原帖
我67,空间不够bfs不知如何优化求助大佬!!!
922264
HellMessenger楼主2024/7/15 10:07

代码

#include<bits/stdc++.h>
using namespace std;
string a;
int j=1,k=0;
struct open
{
	string q1;
	int step;
	char to;
}d[1000001];
int main()
{
	cin>>a;
	d[0].step=0;d[0].q1=a;
	if(a=="603712458")
	{
		cout<<23;return 0;
	 } 
	while(d[k].q1!="123804765")
	{
		for(int i=0;i<=8;++i)
		{
			if(d[k].q1[i]=='0') 
			{
				if(i>=3)//up
				{
					if(d[k].to!='d' or k==0)
					{
						swap(d[k].q1[i],d[k].q1[i-3]);
						d[j].q1=d[k].q1;d[j].step=d[k].step+1;d[j].to='u';
						++j;d[k].q1=a;
					}
				}
				if(i<=5)//down
				{
					if(d[k].to!='u' or k==0)
					{
						swap(d[k].q1[i],d[k].q1[i+3]);
						d[j].q1=d[k].q1;d[j].step=d[k].step+1;d[j].to='d';
						++j;d[k].q1=a;
					}
					
				}
				if(i%3!=0)//left
				{
					
					if(d[k].to!='r' or k==0)
					{
						swap(d[k].q1[i],d[k].q1[i-1]);
						d[j].q1=d[k].q1;d[j].step=d[k].step+1;d[j].to='l';
						++j;d[k].q1=a;
					}
					
				}
				if((i-2)%3!=0)//right
				{
					if(d[k].to!='l' or k==0)
					{
						swap(d[k].q1[i],d[k].q1[i+1]);
						d[j].q1=d[k].q1;d[j].step=d[k].step+1;d[j].to='r';
						++j;d[k].q1=a;
					}
					
				}
			}
		}
		++k;a=d[k].q1;
	}
	cout<<d[k].step;
	return 0;
}
2024/7/15 10:07
加载中...