题意:
从0点到n+1点 之间的距离不能大于20*50
BFS水题
#include <bits/stdc++.h>
using namespace std;
#define cpp_io() {ios::sync_with_stdio(false); cin.tie(NULL);}
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define CLR(a,b) memset(a,(b),sizeof(a))
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ls o<<1
#define rs o<<1|1
typedef long long ll;
typedef vector<int> VI;
const int MAXN = (int)2e5+10;
const int INF = 0x3f3f3f3f;
const int mod = (int)1e9+7;
int n;
bool vis[MAXN];
struct node {
int x,y;
}p[MAXN];
int dist(node a,node b){
return abs(a.x-b.x)+abs(a.y-b.y);
}
bool bfs(int s, int e) {
CLR(vis, false);
queue<int>que; que.push(s);
while(!que.empty()){
int u=que.front();
que.pop();
if(vis[u]) continue;
vis[u]=true;
rep(v,0,n+2) {
if(!vis[v]&&dist(p[u],p[v])<=20*50)
que.push(v);
}
}
return vis[e];
}
int main() {
cpp_io();
int T;cin>>T;
while(T--){
cin>>n;
rep(i,0,n+2) cin>>p[i].x>>p[i].y;
if(bfs(0,n+1)) cout<<"happy\n";
else cout<<"sad\n";
}
return 0;
}
本文讨论了使用BFS算法解决从起点到终点的距离不超过特定值的问题,通过实例展示了算法的应用。
215

被折叠的 条评论
为什么被折叠?



