向大佬求助
  • 板块P3395 路障
  • 楼主在春
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/9/7 20:44
  • 上次更新2023/11/5 13:34:31
查看原帖
向大佬求助
271169
在春楼主2020/9/7 20:44

求助

#include<bits/stdc++.h>
#define m (2*n-2) 
using namespace std;
int w;
int n;
int x[12000],y[12000];
int mx[4]={0,1,0,-1},my[4]={1,0,-1,0};
int vis[2000][2000];
int mp[2000][2000];
bool flag;
int t;
int sum;
int main(){
	cin>>w;
	for(int o=1;o<=w;o++){
		cin>>n;
		flag=false;
		memset(vis,0,sizeof(vis));
		memset(vis,0,sizeof(mp));
		for(int j=1;j<=m;j++){
			cin>>x[j]>>y[j];
		}
		queue<int>q;
		queue<int>p;
		queue<int>tt;
		q.push(1);
		p.push(1);
		tt.push(0);
		vis[1][1]=1;
		
	while(!q.empty()){
		int a=q.front();
		int b=p.front();
		int uu=tt.front();
		q.pop();
		p.pop(); 
		tt.pop();
		if(a==n&&b==n){
			flag=true;
			break;
		}
		mp[x[tt.front()-1]][y[tt.front()-1]]=1;
		for(int i=0;i<4;i++){
			int dx=a+mx[i];
			int dy=b+my[i];
			if(dx>=1 && dx<=n && dy>=1 && dy<=n && mp[dx][dy]==0 && vis[dx][dy]==0) {//在矩阵中,无障碍,无访问 
				vis[dx][dy]=1;
				q.push(dx);
				p.push(dy);
				tt.push(uu+1);
			}
		
		}
	}
		if(flag)cout<<"Yes"<<endl;
		else cout<<"No"<<endl; 
		while(!q.empty()) q.pop();
		while(!p.empty()) p.pop();
	}
	return 0;
}

//3
//
//1
//
//2
//1 1
//1 2
//
//3
//3 3
//1 1
//2 2
//2 3

//Yes
//Yes
//No

为什么不可以这样子写 这样子的队列是不可以的吗

2020/9/7 20:44
加载中...