怎么优化?可以跑13步以内,但测试爆零显示re和lme
查看原帖
怎么优化?可以跑13步以内,但测试爆零显示re和lme
1097623
handlike楼主2024/7/17 10:51
#include<bits/stdc++.h>

using namespace std;

string l="123804765",f,shi[1000001];

int step=0,wf[1000001]={0},i=0,j=0,fa[1000001]={-1,0},c1=1,c2=0;

int fpt(int min)

{

	f=shi[i];
	if(wf[i]-3>=0 && wf[i]-3!=fa[i])
	{
		c2++;
		j++;
		if(j>1001)
			j=1;
		fa[j]=wf[i];
		swap(f[wf[i]],f[wf[i]-3]);
		shi[j]=f;
		wf[j]=f.find('0');
		if(f.compare(l)==0)
			return 0;
	}
	f=shi[i];
	if(wf[i]-1>=0 && wf[i]-1!=fa[i])
	{
		c2++;
		j++;
		if(j>1001)
			j=1;
		fa[j]=wf[i];
		swap(f[wf[i]],f[wf[i]-1]);
		shi[j]=f;
		wf[j]=f.find('0');
		if(f.compare(l)==0)
			return 0;
	}
	f=shi[i];
	if(wf[i]+1<=8 && wf[i]+1!=fa[i])
	{
		c2++;
		j++;
		if(j>1001)
			j=1;
		fa[j]=wf[i];
		swap(f[wf[i]],f[wf[i]+1]);
		shi[j]=f;
		wf[j]=f.find('0');
		if(f.compare(l)==0)
			return 0;
	}
	f=shi[i];
	if(wf[i]+3<=8 && wf[i]+3!=fa[i])
	{
		c2++;
		j++;
		if(j>1001)
			j=1;
		fa[j]=wf[i];
		swap(f[wf[i]],f[wf[i]+3]);
		shi[j]=f;
		wf[j]=f.find('0');
		if(f.compare(l)==0)
			return 0;
	}
	c1--;
	if(c1==0)
	{
		step++;
		c1=c2;
		c2=0;
	}
	i++;
	if(i>1001)
		i=1;
	printf("i=%d,j=%d,step=%d\n",i,j,step);
	fpt(step);
}

int main()

{

	getline(cin,f);
	shi[0]=f;
	wf[0]=f.find('0');
	fpt(step);
	if(c1!=0)
		step++;
	printf("%d",step);
	return 0;
    
} 
2024/7/17 10:51
加载中...