本地测试很快,为什么提交后一个测试点都过不了(TLE),蒟蒻求助
查看原帖
本地测试很快,为什么提交后一个测试点都过不了(TLE),蒟蒻求助
544773
JoeZ009楼主2022/7/21 22:04
#include<bits/stdc++.h>
using namespace std;
int END=123804765;
char in[5][5];
int n[5][5];
int q[10000][5][5],hh=1,tt=1;
int ans[10000][3];
int xt[]= {0,0,1,0,-1};
int yt[]= {0,1,0,-1,0};
int s(int x) {
	int ans=1;
	for(int i=1; i<=3; i++)
		for(int j=1; j<=3; j++)
			ans=ans*10+int(q[x][i][j]);
}
map<int,bool>p;

int k;
int main() {
	for(int i=1; i<=3; i++)
		for(int j=1; j<=3; j++) {
			cin>>in[i][j];
			q[1][i][j]=int(in[i][j]-'0');
			if(!q[1][i][j]) {
				ans[1][0]=0;
				ans[1][1]=i;
				ans[1][2]=j;
			}
		}

	int hh=1,tt=1;
	p[s(1)]=1;
	while(hh<=tt) {
//		cout<<s(hh)<<" "<<ans[hh][0]<<endl;
		if(s(hh)%1000000000==END) {
			cout<<ans[hh][0]<<endl;
			return 0;
		}
		for(int i=1; i<=4; i++) {
			int x1=ans[hh][1]+xt[i],y1=ans[hh][2]+yt[i];
			if(x1<=3&&x1>=1&&y1<=3&&y1>=1) {
				tt++;
				for(int i=1; i<=3; i++)for(int j=1; j<=3; j++)q[tt][i][j]=q[hh][i][j];
				swap(q[tt][ans[hh][1]][ans[hh][2]],q[tt][x1][y1]);
				if(p[s(tt)]) {
					tt--;
					continue;
				} else {
					p[s(tt)]=1;
					ans[tt][0]=ans[hh][0]+1;
					ans[tt][1]=x1;
					ans[tt][2]=y1;
				}
			}
		}
		hh++;
	}
	return 0;
}

2022/7/21 22:04
加载中...