求助
  • 板块P3395 路障
  • 楼主Tangye
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/2 11:27
  • 上次更新2024/11/2 15:37:37
查看原帖
求助
468851
Tangye楼主2024/11/2 11:27
#include<bits/stdc++.h>
using namespace std;
#define maxn 1010
const int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int T,n,t[maxn][maxn];
bool vis[maxn][maxn];
struct node{
	int x,y,times;
};
queue<node>q;
int main(){
	cin>>T;
	while(T--){
		cin>>n;
		memset(t,0,sizeof(t));
		for(int i=1;i<=2*n-2;i++){
			int fx,fy;
			cin>>fx>>fy;
			t[fx][fy]=i;
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++)
				cout<<t[i][j]<<" ";
			cout<<endl;
		}
		while(!q.empty()) q.pop();
		q.push((node){1,1,0});
		memset(vis,false,sizeof(vis));
		vis[1][1]=true;
		bool flag=false;
		while(!q.empty()){
			node f=q.front();
			q.pop();
			if(f.x==n&&f.y==n){
				cout<<"Yes"<<endl;
				flag=true;
				break;
			}
			for(int i=0;i<4;i++){
				int fx=f.x+dx[i],fy=f.y+dy[i];
				if(fx<=n&&fx>=1&&fy<=n&&fy>=1&&t[fx][fy]>=f.times&&!vis[fx][fy]){
					q.push((node){fx,fy,f.times+1});
					vis[fx][fy]=true;
				}
			}
		}
		if(flag) continue;
		else{
			cout<<"No"<<endl;
			continue;
		}
	}
	return 0;
}
/*
1
2
1 1
1 2
*/ 
2024/11/2 11:27
加载中...