CCF 201403-4 无线网络 100分(bfs)
Posted 登登登ccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF 201403-4 无线网络 100分(bfs)相关的知识,希望对你有一定的参考价值。
题目来源:- 计算机软件能力认证考试系统
这题不能用vector来记录结构体,必须用数组,不然通不过。
#include<bits/stdc++.h>
using namespace std;
struct Router
long long x,y;
int step,limit;
Router(long long xx=0, long long yy=0, int s=0, int l=0):x(xx),y(yy),step(s) ;
v[210];
int BFS(int n, int m, int k, long long r)
bool visited[210];
memset(visited, false, sizeof(visited));// 是否被访问
queue<Router> q;
q.push(v[0]); //将根节点加入队列
visited[0]=true;// 设置根结点为已经被访问
while(!q.empty()) //队列为空停止
Router cur=q.front(); //取队头元素
q.pop(); //出队
if(cur.x==v[1].x && cur.y==v[1].y) //到目的路由器终止
return cur.step-1;
int up;
if(cur.limit == k)//增设路由器到上限后,就不在n+m中遍历,而是在n中遍历
up=n;
else
up=n+m;
for(int i=0; i<up; i++)
if(visited[i]) //被访问过则跳过
continue;
// 判定下一个路由器的坐标是否在半径r之内, 不在半径之内则跳过,在半径之内则继续搜索
if((v[i].x-cur.x)*(v[i].x-cur.x)+(v[i].y-cur.y)*(v[i].y-cur.y) > r*r)
continue;
else
visited[i]=true; //设置为已经被访问
Router next(v[i].x,v[i].y,cur.step+1); //创建下一个进入队列的路由器结点
if(i>=n)
next.limit=cur.limit+1; //增设的路由器数量+1
else
next.limit=cur.limit;
q.push(next); //入队
return 0;
int main()
int n,m,k;
long long r;
cin>>n>>m>>k>>r;
long long x,y;
for(int i=0; i<n+m; i++)
cin>>v[i].x>>v[i].y;
int ans=BFS(n,m,k,r);
cout<<ans;
return 0;
以上是关于CCF 201403-4 无线网络 100分(bfs)的主要内容,如果未能解决你的问题,请参考以下文章