去长沙理工考ccf。恰好又可以见闺蜜。

前2道题很简单,第三题题目太长就跳过了【绕来绕去就像“你儿子是我儿子的爸爸一样头疼”】,就做第四题。但是还有最后一个部分没写写好就到点了。

现在把它补充完整。

我忘记怎么在函数参数中使用二维数组,所以直接把函数写在main里。

分为2个部分,一个是求最短路径,一个是找出要改建的路。

最短路径采用的是dijkstra算法。

寻找要改建的路的部分。我一开始一直想要使用最小支撑树实现【即贪心算法】。但是我后来恍然发现,最后一个状态一定是每个城市都能以最短路径达到首都。那么a城市的最短路径就是与a相邻的某一个城市b的最短路径加上ab城市的距离。

需要说明的是,我没有使用大量数据测试。

仅供参考,如有错误,欢迎指正,共同学习。

  1 #include<iostream>
  2 #define far 1000
  3 using namespace std;
  4 int main()
  5 {
  6     int n,m,i,j,k;
  7     int sum=0;
  8     int x,y,z;
  9     cin>>n>>m;
 10     int a[n][n],edge[m];
 11     int visit[n],dis[n];
 12     for(i=0;i<n;i++)
 13     {
 14         for(j=0;j<n;j++)
 15         {
 16             a[i][j]=far;
 17         }
 18         visit[i]=0;
 19         dis[i]=far;
 20     }
 21     for(i=0;i<m;i++)
 22     {
 23         cin>>x>>y>>z;
 24         a[x-1][y-1]=a[y-1][x-1]=z;
 25         edge[i]=z;
 26     }
 27     for(i=0;i<n;i++)
 28     {
 29         for(j=0;j<n;j++)
 30             cout<<a[i][j]<<"  ";
 31         cout<<endl;
 32     }
 33     dis[0]=0;
 34     int v;
 35     for(i=0;i<n;i++)
 36     {
 37         for(j=0;j<n;j++)
 38         {
 39             if(visit[j]==0&&dis[j]!=far)
 40                 v=j;
 41         }
 42         for(j++;j<n;j++)
 43         {
 44             if((visit[j]==0)&&(dis[j]<v))
 45                 v=j;
 46         }
 47         visit[v]=1;
 48         for(j=0;j<n;j++)
 49         {
 50             if(dis[j]>dis[v]+a[v][j])
 51                 dis[j]=dis[v]+a[v][j];
 52         }
 53
 54     }
 55     for(j=0;j<n;j++)
 56             cout<<dis[j]<<"   ";
 57         cout<<endl;
 58
 59
 60     for(i=0;i<n;i++)
 61         visit[i]=0;
 62
 63     visit[0]=1;
 64     for(i=0;i<n;i++)
 65     {
 66         for(j=0;j<m;j++)
 67         {
 68             if(edge[j]==dis[i])
 69             {
 70                 cout<<"改变的边--"<<edge[j]<<endl;
 71                 sum=sum+edge[j];
 72                 edge[j]=0;
 73                 visit[i]=1;
 74             }
 75         }
 76     }
 77     for(i=0;i<n;i++)
 78     {
 79         if(visit[i]==0)
 80         {
 81             for(j=0;j<n;j++)
 82             {
 83                 if(dis[j]+a[i][j]==dis[i])
 84                 {
 85                     for(int k=0;k<m;k++)
 86                     {
 87                         if(edge[k]==a[i][j])
 88                         {
 89                             cout<<"改变的边--"<<edge[k]<<endl;
 90                             sum=sum+edge[k];
 91                             edge[k]=0;
 92                             visit[i]=1;
 93                             break;
 94                         }
 95                     }
 96                 }
 97             }
 98         }
 99     }
100     cout<<endl<<"sum---"<<sum<<endl;
101     cout<<"visit"<<endl;
102     for(i=0;i<n;i++)
103         cout<<visit[i]<<"  ";
104     return 0;
105
106 }

View Code

因为没有注释,可能比较难看懂。不懂的地方,也欢迎和我交流。

转载于:https://www.cnblogs.com/zhenzhenhuang/p/5873609.html

2016年9月ccf相关推荐

  1. 计算机一级判断题2016,2016年12月计算机一级考试WPS判断题及答案

    练习做多了自然会形成自己的做题方法和速度,为此,今天百分网小编为大家整理了以下2016年12月计算机一级考试WPS判断题及答案,希望对大家有帮助! 判断题一 1.在Word中,标尺是按一个字符宽度标度 ...

  2. 2016年3月全球操作系统版本份额:Win10仅次win7

    IDC评述网(idcps.com)04月07日报道:根据市场研究公司Net Applications最新数据显示,在2016年3月全球操作系统市场上,Windows的冠军地位不可动摇,份额与上月基本保 ...

  3. Chrome将于2016年4月终止对Windows XP的支持

    近日,Chrome团队技术总监Marc Pawliger在Chrome官方博客中宣布谷歌将于2016年4月份终止Chrome对Windows XP的支持,这比原计划延长了4个月. \\ 除了Windo ...

  4. linux运维实战练习-2016年3月4日-3月19日课程作业(练习)安排

    注:本次作业适用于就业班和套餐班. I.作业(练习)内容: 1.搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机. 2.基于1题目中的环境,重新搭建一个同样的环境,要求: a)实现web服务文件 ...

  5. 2016年7月微软MVP申请開始了!

    2016年7月微软MVP申请開始了! CSDN与微软合作,长期为用户提供申请"微软最有价值专家"的平台.希望有兴趣.资历的朋友以及正在朝这个方向努力的朋友能够积极參与. 2016年 ...

  6. 计算机应用基础考试试题及答案 在word中,用户建立的文件默认,天津大学《计算机应用基础》2016年12月考试期末大作业考核试题...

    请同学及时保存作业,如您在20分钟内不作操作,系统将自动退出. <计算机应用基础>2016年12月考试期末大作业考核试题 试卷总分:100 测试时间:-- 单选题 一.单选题(共50 道试 ...

  7. 关于微型计算机主板的描述错误的是,2016年9月计算机一级考试试题及答案「单选」...

    2016年9月计算机一级考试试题及答案「单选」 在2016年第二次计算机等级考试之际,yjbys小编为同学们准备的是计算机一级考试的模拟试题及答案,希望对大家复习计算机等级考试有所帮助! 计算机一级试 ...

  8. 薛老师软考高项学员:2016年4月27日作业

    薛老师软考高项学员:2016年4月27日作业 1.写全文:论信息系统项目的范围管理 2.写架构:论项目的计划与监控:论项目的进度管理. 转载于:https://blog.51cto.com/xueda ...

  9. 苏州大学9月计算机考试试题,2016年9月计算机一级考试题及答案

    2016年9月计算机一级考试题及答案 1.在Windows环境下,为了终止应用程序的运行,应( ) a. 关闭该应用程序窗口 b. 最小化该应用程序窗口 c. 双击该应用程序窗口的标题栏 d. 将该应 ...

  10. 2016年9月c语言真题,2016年9月计算机二级C语言基础试题及答案

    2016年9月计算机二级C语言基础试题及答案 一.选择题 (1)*作系统主要有两个方面重要作用,下面叙述最恰当的是 A)管理系统的软件和硬件 B)管理*作系统本身和应用系统 C)管理系统中的各种资源并 ...

最新文章

  1. eclipse异常关闭,无法启动tomcat解决办法
  2. 移动通信网络中的数字基带
  3. 项目百态:软件项目管理面面观
  4. Linux下源码安装CodeBlocks
  5. 利用matlab对xml文件进行批量处理
  6. 如何定义和实现一个类的成员函数为回调函数
  7. 自建K8S迁移镜像、应用至阿里云ACK最佳实践
  8. mysql的分页怎么不对_jsp+mysql分页显示我的怎么不对啊?显示始终不对!
  9. QT打印窗口、退出、设置字体及颜色、设置时间、控件实现系统函数、添加资源文件(菜单图片)、工具栏添加图片
  10. C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
  11. 时空解析理论的实验检验方法
  12. s7200cpu224xp手册_西门子S7-200CPU224XP
  13. 面试产品经理 应该如何介绍自己的优势和劣势?
  14. 微信小程序开发工具第一次使用,网络连接不上怎么办
  15. google新搜索网站
  16. Final Cut pro快捷键大全
  17. 分享66个PHP源码,总有一款适合您
  18. 神经网络(深度学习)入门学习
  19. hibernate 学习之——hql 语句
  20. 一团乱麻的长租公寓行业,如何通过科技赋能从逆境中突围而出?

热门文章

  1. Zilliqa Scilla入门
  2. 区块链 Fisco bcos 智能合约(18)-FISCO BCOS的速度与激情:性能优化方案最全解密
  3. kubernetes 查看所有namespace、默认的namespace
  4. Kubernetes 小白学习笔记(24)--kubernetes的运维-管理Service
  5. 比特币交易的脚本如何执行
  6. Unity WIndows语音识别(一)关键字识别
  7. DEDECMS v5.7 实现导航条下拉二级菜单
  8. kafka 安装,使用教程
  9. LayaAir UI 组件 # Clip 切片、ComboBox 下拉框
  10. MongoDB 通过 Java 代码 批量操作