迭代加深搜索22分,其他点TLE,一定要BFS吗?
查看原帖
迭代加深搜索22分,其他点TLE,一定要BFS吗?
477032
diandian2020楼主2021/2/13 10:37
#include<bits/stdc++.h>
using namespace std;
const int b[]={1,2,3,8,0,4,7,6,5};
const int dx[]={-1,1,0,0};
bool ok;
int a[9];
char s[10];
bool check(){
	for(int i=0;i<9;i++) if(a[i]!=b[i]) return 0;
	return 1;
}
void dfs(int lim){
	if(check()){
		ok=1;
		return;
	}
	if(lim==0) return;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			if(a[i*3+j]==0){
				for(int t=0;t<4;t++){
					int x=i+dx[t],y=j+dx[3-t];
					if(0<=x&&x<3&&0<=y&&y<3){
						swap(a[i*3+j],a[x*3+y]);
						dfs(lim-1);
						swap(a[i*3+j],a[x*3+y]);
					}
				}
			}
}
int main(){
	scanf("%s",s);
	for(int i=0;i<9;i++) a[i]=s[i]-'0';
	for(int lim=0;;lim++){
		dfs(lim);
		if(ok){
			printf("%d\n",lim);
			return 0;
		}
	}
}
2021/2/13 10:37
加载中...