hdu 1233 最小生成树

  1. /***********************************************************************************************************************
  2. map 存路径,值为权值; weight保存个点到源起点的权值; pre保存结点的前驱,即与源起点有路的下一个点
  3. length 生成的最短距离 point 图上共有多少点 sign该点是否已经找过
  4. 算法prim:
  5. 从一个结点的子图开始构造生成树:选择连接当前子图和子图外结点的最小权边,将相应结点和边加入子图,直至将所有结点加入子图
  6. ***********************************************************************************************************************/
  7. #include <stdio.h>
  8. #include <string>
  9. #define SIZE 1100
  10. #define INF 0x7fffffff
  11. int map[1100][1100], weight[1100], pre[1100], length, point;
  12. bool sign[1100];
  13. void prim(int weight[],int map[][SIZE], int pre[], bool sign[], int &length, int point_num, int source)
  14. { //source源起点,一定要是路径中有的
  15. for(int i=1; i<=point_num; i++) //这里的路径的标号都 > 1,记录所以点到源起点的权值,前驱,将该点置为已经查找
  16. {
  17. weight[i] = map[source][i];
  18. pre[i] = source; sign[i] = true;
  19. }
  20. sign[source] = false; length = 0;
  21. for(int i=1; i<point_num; i++) //枚举n-1个点,即n-1个通路
  22. {
  23. int min = INF, sign_node = i; //sign_node 记录找到的最小的下一个点
  24. for(int j=1; j<=point_num; j++) //查找最小权值的路径
  25. {
  26. if(sign[j] && weight[j] < min)
  27. {min = weight[j]; sign_node = j;}
  28. }
  29. {sign[sign_node] = false; length += min; } //找到点置为已找到,长度相加,
  30. //可以在这里添加一个标记,使他值等于min,如果最后值等于最大值,则不能生成最小生成树
  31. for(int j=1; j<=point_num; j++) //重新设定源起点,将剩下的未找的点加入
  32. {
  33. if(weight[j] > map[sign_node][j] && sign[j] )
  34. {weight[j] = map[sign_node][j]; pre[j] = sign_node;}
  35. }
  36. }
  37. }
  38. void input(int n, int map[][SIZE])
  39. {
  40. for(int i=1; i<=n ;i++)
  41. {
  42. int a, b, c;
  43. scanf("%d%d%d", &a, &b, &c);
  44. map[a][b] = c; map[b][a] = c;
  45. }
  46. }
  47. int main()
  48. {
  49. int N;
  50. while(~scanf("%d", &N) && N )
  51. {
  52. //scanf("%d", &M);
  53. //int map[1100][1100], weight[1100], pre[1100], length, point;
  54. //bool sign[1100];
  55. for(int i=0; i<=N; i++) //初始化,N是端点个数
  56. {
  57. weight[i] = INF; pre[N] = 0;
  58. for(int j=0; j<=N; j++)
  59. map[i][j] = INF;
  60. }
  61. memset(sign, false, sizeof(sign) );
  62. length = point = 0;
  63. input( N*(N-1)/2, map);
  64. prim(weight, map, pre, sign, length, N, 1); //查找,注意这个1 它是源起点,一定要是在路径上已知的点
  65. printf("%d\n", length);
  66. }
  67. return 0;
  68. }
  69. /*
  70. Problem Description
  71. 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
  72. Input
  73. 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
  74. 当N为0时,输入结束,该用例不被处理。
  75. Output
  76. 对每个测试用例,在1行里输出最小的公路总长度。
  77. Sample Input
  78. 3
  79. 1 2 1
  80. 1 3 2
  81. 2 3 4
  82. 4
  83. 1 2 1
  84. 1 3 4
  85. 1 4 1
  86. 2 3 3
  87. 2 4 2
  88. 3 4 5
  89. 0
  90. Sample Output
  91. 3
  92. 5
  93. */



来自为知笔记(Wiz)


附件列表

 

转载于:https://www.cnblogs.com/sober-reflection/p/5e68cd23427f47403e83f66013d4f7b7.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程间通信(四) - 共享内存

共享内存的优势 采用共享内存通信的一个显而易见的好处是效率高&#xff0c;因为进程可以直接读写内存&#xff0c;而不需要任何数据的拷贝。对于像管道和消息队列等通信方式&#xff0c;则需要在内核和用户空间进行四次的数据拷贝&#xff0c;而共享内存则只拷贝两次数据&…

windows和linux加密u盘,linux挂载windows的各种格式U盘

从windows迁移到linux&#xff0c;像kali还能打开ntfs的格式硬盘&#xff0c;centos连ntfs都打不开&#xff0c;windows和linux两种系统传文件很不方便&#xff0c;所以在网上搜索到一些解决方案&#xff0c;在此记一下。挂载ntfs(安装ntfs-3g):打开ntfs-3g的下载点http://www.…

年底了,还这么忙

作为一个程序员&#xff0c;有时候感到很抓狂&#xff01;不是因为bug&#xff0c;而是因为活儿多得干不完。理论上&#xff0c;我觉得写程序是一件好快乐好快乐的事情&#xff0c;现实中&#xff0c;写程序有时候变成了一件苦逼被人使唤的事情。 在电脑上安装了ubuntu系统&…

jQuery EasyUI使用教程之基本的拖放

2019独角兽企业重金招聘Python工程师标准>>> <jQuery EasyUI最新版下载> 本教程将为你展示如何使HTML元素可拖动。在这个示例中我们将创建3个DIV元素&#xff0c;然后使它们能够被拖动。 查看演示 首先&#xff0c;我们创建3个div元素&#xff1a; < div i…

manjaro linux 教程,Manjaro 使用基础

一、pacman/yay 的基础命令Manjaro 装好后&#xff0c;需要运行的第一条命令&#xff1a;sudo pacman -Syy ## 强制更新包数据sudo pacman-mirrors --interactive --country China # 列出所有国内的镜像源&#xff0c;并提供交互式的界面手动选择镜像源sudo pacman -Syyu # 强制…

1-3-顺时针旋转矩阵

1 /*2 题目描述&#xff1a;3 有一个NxN整数矩阵&#xff0c;请编写一个算法&#xff0c;将矩阵顺时针旋转90度。4 给定一个NxN的矩阵&#xff0c;和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。5 测试样例&#xff1a;6 [[…

在Linux中head命令,Linux 中 head 命令实例

原标题&#xff1a;Linux 中 head 命令实例head命令将每个文件的前10行打印到标准输出。对于多个文件&#xff0c;在每个文件前面加上一个给出文件名的头。如果没有文件&#xff0c;或者文件为-&#xff0c;则读取标准输入。如何使用head命令使用head显示/etc/passwd前十行内容…

C#中的局部类型

1. 什么是局部类型&#xff1f;C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分&#xff0c;分别实现在几个不同的.cs文件中。局部类型适用于以下情况&#xff1a;(1) 类型特别大&#xff0c;不宜放在一个文件中实现。(2) 一个类型中的一部分代…

【原创】Git删除暂存区或版本库中的文件

0 基础 我们知道Git有三大区&#xff08;工作区、暂存区、版本库&#xff09;以及几个状态&#xff08;untracked、unstaged、uncommited&#xff09;&#xff0c;下面只是简述下Git的大概工作流程&#xff0c;详细的可以参见本博客的其他有关Git的文章【链接】。&#xff08;1…

linux软件依赖库,【Linux】ubuntu系统安装及软件依赖库

系统&#xff1a;安装Ubuntu 16.04.1 LTS 更新到Ubuntu 16.04.3 LTS搜狗中文输入法然后安装搜狗输入法for Linux&#xff0c;直接下载deb包&#xff0c;双击->ubuntu software-center闪退&#xff0c;通过升级系统以及重装center解决:sudo apt-get updatesudo apt-get dist-…

JMS

JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。Java消息服务是一个与具体…

reStructuredText(.rst)语法规则快速入门

原文&#xff1a;http://blog.useasp.net/archive/2014/09/05/rst-file-restructuredtext-markup-syntax-quikstart.aspx?utm_sourcetuicool 简介 reStructuredText是一种轻量级的文本标记语言&#xff0c;直译为&#xff1a;重构建的文本&#xff0c;是Python中Docutils项目的…

精读linux源码,Linux基础入门的操作精读.doc

摘要&#xff1a;Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想&#xf…

安卓App设计博文

安卓1080P界面设计规范解读 http://www.25xt.com/appdesign/9487.html APP设计尺寸解读&#xff1a;px、pt、ppi、dpi、dp、sp之间的关系 http://www.25xt.com/appdesign/9294.html 安卓界面设计规范 http://www.25xt.com/android转载于:https://www.cnblogs.com/tmlee/p/4894…

Android学习四、Android中的Adapter

一、Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set. 一个Adapter是…

linux select shell,linux之shell编程select和case用法

shell里的select用法&#xff1a;语法&#xff1a;#i/bin/bashselect 变量 in 列表do要执行的语句done举例&#xff1a;#!/bin/bashecho "What is your favourite OS?"select var in "windows" "Linux" "Gnu Hurd" "Free BSD&qu…

elasticsearch 查询(match和term)

elasticsearch 查询&#xff08;match和term&#xff09; es中的查询请求有两种方式&#xff0c;一种是简易版的查询&#xff0c;另外一种是使用JSON完整的请求体&#xff0c;叫做结构化查询&#xff08;DSL&#xff09;。 由于DSL查询更为直观也更为简易&#xff0c;所以大都使…

Andorid获取状态栏高度

在应用开发中&#xff0c;有时我们需要用代码计算布局的高度&#xff0c;可能需要减去状态栏(status bar)的高度。状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的&#xff0c;例如像通常使用系统资源那样android.R.dimen.status_bar_heig…

linux 域名劫持,域名被劫持处理方案

首先简单说下什么是域名劫持&#xff0c;域名劫持就是在劫持的网络范围内拦截域名解析的请求&#xff0c;分析请求的域名&#xff0c;把审查范围以外的请求放行&#xff0c;否则直接返回假的IP地址或者什么也不做使得请求失去响应&#xff0c;其效果就是对特定的网址不能访问或…

在linux下修改oracle的sys和system的密码和用户解锁

修改oracle的sys和system的密码和用户解锁 1、再linux系统上sqlplus /as sysdba进入sqlplus后就可以修改sys和system的密码了2、alter user sys identified by "密码"alter user system identified by "密码"其实就是先登录到oracle然后&#xff0c;在里面…