救,DFS记忆化搜索70分优化不了了
查看原帖
救,DFS记忆化搜索70分优化不了了
716484
know_car_man楼主2024/7/15 10:10

以下是代码:

#include<bits/stdc++.h>
using namespace std;
string s;
int a[3][3],top[3][3]={1,2,3,8,0,4,7,6,5},dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},sx,sy,minn=25;
int check(){
	int flag=0;
    for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
    		if(a[i][j]!=top[i][j]){
    			flag++;
			}
		}
	}
	if(flag==0){
		return 0;
	}
    else{
    	return flag;
	}
}
bool memory(int st){
	if(check()+st>minn){
		return 1; 
	}
	return 0;
}
void DFS(int x,int y,int z){
	if(!check()){
		minn=z;
		return;
	}
	if(memory(z)){
		return;
	}
	for(int i=0;i<=3;i++){
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(xx>=0&&xx<=2&&yy>=0&&yy<=2){
			swap(a[x][y],a[xx][yy]);
			DFS(xx,yy,z+1);
			swap(a[x][y],a[xx][yy]);
		}
	}
	return;
}
int main(){
	cin>>s;
	int k=0;
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			a[i][j]=int(s[k]-48);
			if(int(s[k]-48)==0){
				sx=i;
				sy=j;
			}
			k++;
		}
	}
	DFS(sx,sy,0);
	cout<<minn;
	return 0;
}

哪位大佬能帮帮本萌新啊球球了!!!

2024/7/15 10:10
加载中...