(BFS)求调!!!
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using str = string;
const int N = 1e3 + 1e2;
const int M = 1e6;
//升:priority_queue <int,vector<int>,greater<int>> qe;
//降:priority_queque <int,vector<int>,less<int>> qe;
int g[5] = {0,0,1,0,-1};
int h[5] = {0,1,0,-1,0};
int n,x[M],y[M],z[M],sum,tail;
char a[N][N];
bool bfs(int k,int l,int r,int ans) {
while(sum<=tail) {
for(int i=1;i<=4;i++) {
int t1 = x[sum] + g[i];
int t2 = y[sum] + h[i];
if(t1>0&&t1<=k&&t2>0&&t2<=k&&a[t1][t2]=='0') {
a[t1][t2]='x';
tail++;
x[tail]=t1;
y[tail]=t2;
z[tail]=z[sum]+1;
if(t1==k&&t2==k) {
return 1;
}
}
}
sum++;
if(z[sum]==ans) {
a[l][r]='x';
return 0;
}
}
a[l][r]='x';
return 0;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
bool flag=0;
int k,ans=0;
scanf("%d",&k);
memset(a,'0',sizeof(a));
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
sum=1,tail=1;
x[1]=1;
y[1]=1;
a[1][1]='x';
for(int j=1;j<=2*k-2;j++) {
int l,r;
scanf("%d%d",&l,&r);
if(flag==0) {
ans++;
if(bfs(k,l,r,ans)) {
flag=1;
ans=0;
}
}
}
if(k==1) {
flag=1;
}
if(flag) {
printf("Yes\n");
}else {
printf("No\n");
}
}
return 0;
}
555!!!我已经被这道题卡了2个小时。
做题背景:就在我样例过的时候,提交......哇!好美丽的黑块块(只有一个TLE)。从此我伤心泪落了三百年!!!
救救我这个孩子吧!!!
我才刚学BFS,就给我一道难题......
正题:我无语,求大佬帮调!!!