IDA* WA 0pts求调
查看原帖
IDA* WA 0pts求调
464732
luqyou楼主2023/1/12 09:34
#include<bits/stdc++.h>
#define ll long long
#define debug
using namespace std;
int st[6][6]={{0,0,0,0,0,0},{0,1,1,1,1,1},{0,0,1,1,1,1},{0,0,0,2,1,1},{0,0,0,0,0,1},{0,0,0,0,0,0}};
int dx[]={0,1,1,-1,-1,2,2,-2,-2};
int dy[]={0,2,-2,2,-2,1,-1,1,-1};
int a[6][6];
bool found;
int h(){
	int cnt=0;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(a[i][j]!=st[i][j]&&a[i][j]!=2){
				cnt++;
			}
		}
	}
	return cnt;
}
pair<int,int> find(){
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(a[i][j]==2){
				return make_pair(i,j);
			}
		}
	}
}
void ids(int dep,int nowdep){
	if(nowdep>dep) return ;
	if(h()==0&&dep==nowdep){ 
		found=1;
		return ;
	}
	int x=find().first,y=find().second;
	for(int i=1;i<=8;i++){
		int nx=x+dx[i],ny=y+dy[i];
		if(nx>=1&&ny>=1&&nx<=5&&ny<=5){ 
			swap(a[x][y],a[nx][ny]); 
			if(h()+nowdep<=dep){
				ids(dep,nowdep+1);
			}
			swap(a[x][y],a[nx][ny]);
		}
	}
}
int t;
int main(){
	cin>>t;
	getchar();
	while(t--){
		for(int i=1;i<=5;i++){
			for(int j=1;j<=5;j++){
				char c=getchar();
				if(c=='*'){
					a[i][j]=2;
				}
				else{
					a[i][j]=(int)(c-'0');
				}
			}
			getchar();
		}
		if(h()==0){
			puts("0");
			goto luqyou;
		} 
		for(int i=1;i<=15;i++){
			ids(i,0);
			if(found){
				cout<<i<<endl;
				goto luqyou;
			}
		}
		puts("-1");
		luqyou:;
		found=0;
	}
	return 0;
}
2023/1/12 09:34
加载中...