题意:给N个点,还有另外m个点(其中只能选K个),求最短路。

思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其他点了),若该点是m个点中的,则count【i】=原来的+1;若不是,则继承原来的。出队时候限制一下,若大于K了,就停止拓展。

原题:目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都

固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网
络连接。
除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置
中选择至多 k 个增设新的路由器。
你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽
量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少?

#include<iostream>
#include<vector>
#include<queue>
using namespace std;struct points
{int x,y;
};
const int inf=0x3f3f3f3f;
int n,m,k,r;
vector<points>v;              //点
int map[205][205];            //图
int dis(points a,points b)    //距离
{return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
void get_gra()                //建图
{for(int i=0;i<n+m;i++){for(int j=i+1;j<n+m;j++){if(dis(v[i],v[j])<=r*r){map[j][i]=map[i][j]=1;}else{map[i][j]=map[j][i]=inf;}}}
}
int inq[205];
int d[205];
int count[205];
void spfa()
{queue<int>q;for(int i=0;i<n+m;i++){count[i]=inq[i]=0;d[i]=inf;}q.push(0);inq[0]=1;d[0]=0;while(!q.empty()){int cur=q.front();q.pop();inq[cur]=0;if(count[cur]>k)continue;         //限制,某点出队的次数for(int i=0;i<n+m;i++){if(d[i]>d[cur]+map[cur][i]){d[i]=d[cur]+map[cur][i];if(inq[i]==0){if(i>=n)              //被限制次数的点,若是经过该点(该点入队),则加{count[i]=count[cur]+1;}else                  //一般的点继承{count[i]=count[cur];}inq[i]=1;q.push(i);}}}}}
int main()
{while(cin>>n>>m>>k>>r){v.clear();points temp;for(int i=0;i<n+m;i++){cin>>temp.x>>temp.y;v.push_back(temp);}get_gra();spfa();cout<<d[1]-1<<endl;       //问的是中间有几个点}return 0;
}

转载于:https://www.cnblogs.com/yezekun/p/3925790.html

最短路中部分点只能从中任意选取K个问题相关推荐

  1. 求从n个数组任意选取一个元素的所有组合

    求从n个数组任意选取一个元素的所有组合,对于这个问题,我们在直观上感觉很容易,但是用程序实现时则发现用for循环解决不了问题,因为n是随意的.在这里,我们用递归的思想,对于数据[1, 3, 4]; [ ...

  2. 【C语言基础练习】有红、绿、蓝三种颜色的球各3个。现在将着9个球混合放在一个盒子中,从中任意摸出6个,编程计算摸出球的各种颜色搭配。

    有红.绿.蓝三种颜色的球各3个.现在将着9个球混合放在一个盒子中,从中任意摸出6个,编程计算摸出球的各种颜色搭配. 1 #include<stdio.h>2 int main()3 {4 ...

  3. 有红、黄、绿三种颜色的球,其中红球 3 个, 黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。1. 输出情况总数;2.输出摸取情

    内容1:有红.黄.绿三种颜色的球,其中红球 3 个, 黄球 3 个,绿球 6 个.先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配.1. 输出情况总数;2.输 ...

  4. 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  5. 第k大的数python代码_Python实现查找数组中任意第k大的数字算法示例

    本文实例讲述了Python实现查找数组中任意第k大的数字算法.分享给大家供大家参考,具体如下: 模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候, ...

  6. 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?

    题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的 ...

  7. Dijkstra 最短路算法(只能计算出一条最短路径,所有路径用dfs)

    上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做&q ...

  8. 三色球问题。有红、黄、绿三种颜色的球,其中红球3个,黄球3个,绿球6个。现将这12个球混放在一个盒子里,从中任意摸出8个球,编程计算摸出球的各种颜色搭配。

    #include <iostream>using namespace std;int main(){ int r,y,l;//r红,y黄,l蓝for(r=0;r<=3;r++){fo ...

  9. 次短路(两种方式) 第K短路

    次短路算法: 有两种比较简单实现次短路的思想 方法一:用 dijkstra 算法 从起点开始 同时维护 [最短路数组(dis1[ ])] 和 [次短路 数组 (dis2[ ])] 方法二:还是用到di ...

最新文章

  1. 专科电子信息工程不学c语言,高中数学物理都不是很好 想报电子信息工程专业(专科)能行么?...
  2. C语言结构体自动初始化实现,C语言中结构体(struct)的几种初始化方法
  3. Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml
  4. 以下结点node定义了一个学生的信息。函数find查找并返回学号小于num,且下一节点学号不小于num的结点指针
  5. 阮一峰react demo代码研究的学习笔记 - React demo1 debug - how is jsx converted to js
  6. Corda服务的异步流调用
  7. 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...
  8. 开机启动简易收集面板并最小化
  9. Java集合框架关系图
  10. Alos 12.5米DEM免费下载教程、高精度DEM数据、土地利用数据、植被类型分布数据、建筑轮廓分布数据
  11. 琼斯是计算体心立方弹性模量_本科阶段固体物理期末重点计算题.doc
  12. 浅谈地震观测仪器的历史和发展趋势
  13. 巴塞瓦尔能量守恒定理
  14. 【现代无线通信技术】1.1OFDM/OFDMA技术
  15. What Is Time-series Data? 什么是时间序列数据?
  16. js 二进制、十进制、十六进制的互相转换
  17. java漏斗代码_集算示例:10 行代码解决漏斗转换计算
  18. nmake编译libraw
  19. 理解文件偏移相对内存偏移节偏移
  20. 财务分析与决策——绪论

热门文章

  1. 海信计算机怎么开机,将海信电视连接到计算机的步骤_计算机的基本知识_IT /计算机_信息...
  2. 第12章[12.2] Ext JS可编辑列Grid的全场景开发
  3. [IE兼容性] Table 之边框
  4. ExtJS 3 在Tab下加入Form 实例
  5. mysql 检索操作时间段_postgresql数据库使用说明_实现时间范围查询
  6. D1. Kirk and a Binary String (easy version)
  7. #6277. 数列分块入门 1
  8. SQLyog客户端常用快捷键
  9. 连接MySQL时出现警告Establishing SSL connection without server's identity verification is not recommended.
  10. ajax调用外域接口不进回调函数_网易实战分享云信IM SDK接口设计实践