社区讨论

#9 T了......

P2324[SCOI2005] 骑士精神参与者 5已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lo2daqdj
此快照首次捕获于
2023/10/23 11:58
2 年前
此快照最后确认于
2023/11/03 12:06
2 年前
查看原帖
实在想不到什么优化了
CPP
#include<bits/stdc++.h>
using namespace std;
//#define int  long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
	int vis=1,ans=0;
	char x=getchar();
	while(x<'0'||x>'9'){
		if(x=='-')vis=-1;
		x=getchar();
	}
	while(x>='0'&&x<='9'){
		ans=ans*10+x-'0';
		x=getchar();
	}
	return vis*ans;
}
inline void print(long long x){
	if(x<0)putchar('-'),x=-x;
	if(x>9)print(x/10);
	putchar(x%10+'0');
}
int T=read(),fx,fy,vis;
int dx[]={2,1,-1,-2,2,1,-1,-2};
int dy[]={-1,-2,-2,-1,1,2,2,1};
int ex[]={2,1,-1,-2,2,1,-1,-2};
int ey[]={-1,-2,-2,-1,1,2,2,1};
char gh[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'}
};
char be[6][6];
int check(){
	int num=0;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(be[i][j]!=gh[i][j])num++;
		}
	}
	return num;
}
void dfs(int x,int y,int step,int maxn){
	int tmp=check();
//	print(tmp),endl;
	if(vis||step+tmp-1>maxn)return;
	if(!tmp){
		vis=1;
		return;
	}
	for(int i=0;i<8;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if(yy>=1&&yy<=5&&xx>=1&&yy<=5){
//			dy[i]=dx[i]=0;
			swap(be[xx][yy],be[x][y]);
			tmp=check();
			if(step+tmp<=maxn)	dfs(xx,yy,step+1,maxn);
//			dx[i]=ex[i],dy[i]=ey[i];
			swap(be[xx][yy],be[x][y]);
		}
	}
}
signed main(){
	while(T--){
		vis=0;
		for(int i=1;i<=5;i++){
			for(int j=1;j<=5;j++){
				cin>>be[i][j];
				if(be[i][j]=='*')be[i][j]='2',fx=i,fy=j;
			}
		}
		for(int i=0;i<=15;i++){
			dfs(fx,fy,0,i);
			if(vis){
				print(i),endl;
				break;
			}
		}
		if(!vis){
			print(-1),endl;
		}
	}	
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...