我应该是第一个样例没过但是AC了的把
  • 板块P3395 路障
  • 楼主yangyoulin
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/8 14:38
  • 上次更新2024/4/8 18:33:15
查看原帖
我应该是第一个样例没过但是AC了的把
1229346
yangyoulin楼主2024/4/8 14:38

有没有大佬解释一下

#include "stdio.h"

int n,t,a[1005][1005];

int v[4][2]={0,1,0,-1,1,0,-1,0};
int b[1005][1005];

struct str
{
	int x;
	int y;
	
}que[1000005];

int bfs(int n)
{
	if(n==1) return 1;
	int i,j,head=0,tail=0,x,y,k=1;
	que[head].x=n;
	que[head].y=1;
	tail++;
	b[n][1]=1;
	
	
	while(head<tail)
	{
	  if(k<=2*n-2)
	  {
	  	scanf("%d%d",&x,&y);
	  	a[n-x+1][y]=1;
	  	k++;
	  }
	  
	  
	  for(i=0;i<4;i++)
	  {
	  	int tx=que[head].x+v[i][0];
	  	int ty=que[head].y+v[i][1];
	  	
	  	if(tx<1||tx>n||ty<1||ty>n||b[tx][ty]==1||a[tx][ty]==1) 
	  	continue;
	  	b[tx][ty]=1;
	  	que[tail].x=tx;
	  	que[tail].y=ty;
	  	if(tx==1&&ty==n) return 1;
	  	tail++;
	  	
	  }
		head++;
		
	}
	return 0;
	
    
}

main()
{
	int i,j,x,y;
	scanf("%d",&t);
	
	while(t--)
	{
		scanf("%d",&n);
		//if(n==1) {printf("Yes\n"); continue;}
		
		if(bfs(n))
		printf("Yes\n");
		
		else printf("No\n");
		
		for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		a[i][j]=b[i][j]=0;
	}
}
2024/4/8 14:38
加载中...