P2324疑惑,我的AC代码怎么不能AC了,我直接复制的啊
  • 板块学术版
  • 楼主zyxawa
  • 当前回复19
  • 已保存回复19
  • 发布时间2022/11/19 11:52
  • 上次更新2023/10/27 02:25:05
查看原帖
P2324疑惑,我的AC代码怎么不能AC了,我直接复制的啊
673294
zyxawa楼主2022/11/19 11:52
#include<bits/stdc++.h>
using namespace std;
int t,dir[8][2]={{-2,-1},{-1,-2},{1,2},{2,1},{-1,2},{2,-1},{-2,1},{1,-2}};
char a[6][6],pd[5][5]={{'1','1','1','1','1'},{'0','1','1','1','1'},{'0','0','*','1','1'},{'0','0','0','0','1'},{'0','0','0','0','0'}};
bool flag;
int find(){
	int res=0;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++) res+=(a[i][j]!=pd[i-1][j-1]);
	}
	return res;
}
void dfs(int sx,int sy,int pos,int dep){
	int tot=find();
	if(pos+tot>dep||flag) return;
	if(!tot){
		flag=true;
		return;
	}
	
	for(int i=0;i<=7;i++){
		int fx=sx+dir[i][0],fy=sy+dir[i][1];
		if(fx<1||fy<1||fx>5||fy>5) continue;
		swap(a[sx][sy],a[fx][fy]);
		dfs(fx,fy,pos+1,dep);
		swap(a[sx][sy],a[fx][fy]);
	}
}
int main(){
	scanf("%d",&t);
	while(t--){
		int sx,sy;
		flag=false;
		for(int i=1;i<=5;i++) scanf("%s",a[i]+1);
		for(int i=1;i<=5;i++){
			for(int j=1;j<=5;j++){
				if(a[i][j]=='*'){
					sx=i;
					sy=j;
				}
			}
		}
		if(!find()){
		    printf("0\n");
		    continue;
		}
		for(int dep=1;dep<=16;dep++){
			dfs(sx,sy,0,dep);
			if(flag){
				printf("%d\n",dep-1);
				break;
			}
		}
		if(!flag) printf("-1\n");
	}
	return 0;
}

第一次交就是AC,后面交就不能AC了,除非改了一个不影响结果的地方,又会AC,但是再交就不能AC了

2022/11/19 11:52
加载中...