神奇的搜索顺序,求解惑
  • 板块P3395 路障
  • 楼主Kx_Triumphs
  • 当前回复1
  • 已保存回复2
  • 发布时间2024/7/27 14:11
  • 上次更新2024/7/27 15:24:14
查看原帖
神奇的搜索顺序,求解惑
482130
Kx_Triumphs楼主2024/7/27 14:11

为什么同一份代码,搜索优先级不同,一份 30pts30pts,一份 100pts100pts

#include<bits/stdc++.h>
using namespace std;
const int N=5005;
int T;
int n;
int vis[N][N];
// int dr[4][2]={{0,1},{1,0},{0,-1},{-1,0}};  //20pts
int dr[4][2]={{1,0},{0,1},{-1,0},{0,-1}};  //100pts
struct node{
	int x,y;
}ti[5005];
int can[N][N];
void dfs(int x,int y,int t){
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int tx=x+dr[i][0];
		int ty=y+dr[i][1];
		if(tx<1||ty<1||tx>n||ty>n
		||vis[tx][ty]||can[tx][ty]) continue;
		can[ ti[t+1].x ][ ti[t+1].y ]=1;
		dfs(tx,ty,t+1);
		can[ ti[t+1].x ][ ti[t+1].y ]=0;
	}
	return ;
}
void solve(){
	scanf("%d",&n);
	for(int i=1;i<=2*n-2;i++){
		scanf("%d%d",&ti[i].x,&ti[i].y);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			vis[i][j]=0;
			can[i][j]=0;
		}
	}
	dfs(1,1,0);
	if(vis[n][n]==1){
		printf("Yes\n");
	}
	else{
		printf("No\n");
	}
}
int main(){
	scanf("%d",&T);
	while(T--){
		solve();
	}
	
	return 0;
}
/*
2
2
1 1
2 2
5
3 3
3 2
3 1
1 2
1 3
1 4
1 5
2 2
*/

2024/7/27 14:11
加载中...