博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-1751 Highways---确定部分边的MST
阅读量:7124 次
发布时间:2019-06-28

本文共 1960 字,大约阅读时间需要 6 分钟。

题目链接:

题目大意:

有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输出需要添加边的两端点编号即可.

思路:

这里已经有部分边,要求剩下的MST,一开始没想到技巧,后来发现只要将已有的边的权值设置为0就可以直接求MST,这是一个很重要的技巧,如果已经确定的部分边,那就直接把这些边的权值设置成0,求出MST之后一定是包含这些边的MST。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 using namespace std;12 typedef long long ll;13 typedef pair
Pair;14 const int maxn = 1e3 + 10;15 const int INF = 1 << 30;16 int dir[4][2] = { 1,0,0,1,-1,0,0,-1};17 int T, n, m;18 double Map[maxn][maxn];//存图19 double lowcost[maxn];20 int mst[maxn];21 Pair a[maxn];22 void prim(int u)//最小生成树起点23 {24 for(int i = 1; i <= n; i++)//初始化两个数组25 {26 lowcost[i] = Map[u][i];27 mst[i] = u;28 }29 mst[u] = -1;//设置成-1表示已经加入mst30 for(int i = 1; i <= n; i++)31 {32 double minn = INF;33 int v = -1;34 //在lowcost数组中寻找未加入mst的最小值35 for(int j = 1; j <= n; j++)36 {37 if(mst[j] != -1 && lowcost[j] < minn)38 {39 v = j;40 minn = lowcost[j];41 }42 }43 if(v != -1)//v=-1表示未找到最小的边,44 { //v表示当前距离mst最短的点45 //printf("%d %d %d\n", mst[v], v, lowcost[v]);//输出路径46 if(Map[mst[v]][v])printf("%d %d\n", mst[v], v);47 mst[v] = -1;48 for(int j = 1; j <= n; j++)//更新最短边49 {50 if(mst[j] != -1 && lowcost[j] > Map[v][j])51 {52 lowcost[j] = Map[v][j];53 mst[j] = v;54 }55 }56 }57 }58 //printf("weight of mst is %d\n", sum_mst);59 }60 int main()61 {62 cin >> n;63 for(int i = 1; i <= n; i++)cin >> a[i].first >> a[i].second;64 for(int i = 1; i <= n; i++)65 {66 for(int j = i; j <= n; j++)67 {68 Map[i][j] = Map[j][i] = sqrt((a[i].first - a[j].first) * (a[i].first - a[j].first) + (a[i].second - a[j].second) * (a[i].second - a[j].second));69 }70 }71 cin >> m;72 int x, y;73 for(int i = 0; i < m; i++)//将已有的边的权值设置为0!!!74 {75 cin >> x >> y;76 Map[x][y] = Map[y][x] = 0;77 }78 prim(1);79 return 0;80 }

 

转载于:https://www.cnblogs.com/fzl194/p/8727368.html

你可能感兴趣的文章
《ANSYS 14热力学/电磁学/耦合场分析自学手册》——2.9 图形窗口
查看>>
阿里 MySQL 团队加入参与 WebScaleSQL 开发
查看>>
《Adobe After Effects CC经典教程》——2.3 创建新合成图像
查看>>
提高 PHP 代码质量的 36 计
查看>>
《Adobe Premiere Pro CS4经典教程》——1.4 提供标准的数字视频工作流
查看>>
《CCNP TSHOOT 300-135学习指南》——1.4节本章小结
查看>>
诺基亚将更名为微软移动
查看>>
Vue.js 作者尤雨溪加盟 Weex 团队担任技术顾问
查看>>
js初级脚本算法
查看>>
《iOS应用开发指南——使用HTML5、CSS3和JavaScript》——1.1节移动魔力和掌上电脑...
查看>>
《Microduino实战》——3.5 I/O操作——现学现用
查看>>
《思科数据中心I/O整合》一2.2 无损耗以太网(Lossless Ethernet)
查看>>
《触摸屏游戏设计》——4.1节 起名字
查看>>
《树莓派渗透测试实战》——1.2 组装树莓派
查看>>
《网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通》—— 1.2 网页的基本构成元素...
查看>>
《21天学通Java(第6版)》—— 1.1 Java语言
查看>>
《图数据库》——第 2 章 关联数据的存储选择
查看>>
《SQL学习指南(第2版)(修订版)》———1.4 内容前瞻
查看>>
使用Redis作为一个LRU缓存
查看>>
《易学C++(第2版)》——1.7 C++学习的常见问题
查看>>