当前位置: 首页 > news >正文

网站工程师培训外贸网站 栏目

网站工程师培训,外贸网站 栏目,商业网站建设案例课程,北京网站建设中企云达编程要求 在图的应用中#xff0c;有一个很重要的需求#xff1a;我们需要知道从某一个点开始#xff0c;到其他所有点的最短路径。这其中#xff0c;Dijkstra 算法是典型的最短路径算法。 本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码#xff0c;实现 …编程要求 在图的应用中有一个很重要的需求我们需要知道从某一个点开始到其他所有点的最短路径。这其中Dijkstra 算法是典型的最短路径算法。 本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码实现 Dijkstra 算法求单源最短路径具体要求如下 补全代码 int[] Paths(int source) 方法实现 Dijkstra 算法 输出源点 source 到其他各个定点的距离如果不可达则距离输出 INF。 测试举例 测试过程 平台将创建用户补全后的ShortestPath类的对象 调用对象的addEdge(int u, int v, int w)方法添加边和边的权重信息构建图G 调用对象的Paths(int source)方法执行Dijkstra算法求最短路径并输出返回的最短路径这里源点设置为1 接着根据程序的输出判断程序是否正确。 以下是测试样例 测试输入 5 7 1 2 8 1 3 1 1 4 2 3 4 2 2 4 3 3 5 3 4 5 3 (5 和 7 分别表示顶点数和边数) 预期输出 0 5 1 2 4  思路解析 求单源最短路径就是求一个点到除它以外所有点的最短距离首先我们还是用邻接矩阵来储存图的信息。以测试输入为例示意图如下。 既然是求1的单源最短路径那我们就定义一个数组dic[n1],将dic初始化存储从1到所有点的直接距离。比如dic[1]到dic[5]分别是【081299999999】因为1无法直接到5所以初始化为99999999。 然后找出dic里面1到2-n之间的最短距离发现是dic[3] 1,然后找1通过3能到达的地方发现能到达4和5如果1通过3到达4的话得出dic[4] 2 dic[3]arr[3][4] 3无法使到四的路程更短所以不改变dic[4]的值但是我们发现到达5即dic[5] 99999999dic[3]arr[3][5] 4,能使1到5距离缩短于是改变dic[5]的值。这样我们就得到能通过3进行优化一轮路径学术名叫做松弛。 我们知道如果已经通过3实现了一轮优化那么我们将进一步缩短路程的话是不能走回头路的因为如果再次经过3的话没有意义所以最短路没有重复路径。 那么我们就要定义一个数组来存储已经作为转点进行一轮松弛的点我们可以定义book[n1]来存储。将作为转点的点比如3用book[3] 1表示已经使用过。 之后便是重复步骤找除去dic[3]以外的最小值也就是dic[4],继续进行一轮松弛将4这个点用book[4] 1,表示已经使用过。 之后的图大家可以自己试着来画出。 具体代码 #includestdio.h int main(void) { int arr[100][100] { 0 }; int dic[100]; int book[100] { 0 }; int m, n, a, b, c, u, v; int inf 99999999; scanf(%d%d, n, m); for (int i 1; i n; i) for (int j 1; j n; j) if (i j) arr[i][j] 0; else arr[i][j] inf; for (int i 1; i m; i) { scanf(%d%d%d, a, b, c); arr[a][b] c; arr[b][a] c; }//无向图初始化。 for (int i 1; i n; i) dic[i] arr[1][i];//初始化dic数组 for (int i 1; i n - 1; i)//最多要进行n-1轮松弛i值不会使用仅仅表示循环多少轮。 { int min inf; for (int j 2; j n; j) { if (book[j] 0 dic[j] min) { min dic[j]; u j; } }//找出从1到任意数字的最短值。 book[u] 1;//将该位置提前存储表示已经使用过。 for (v 2; v n; v)//优化1通过u到所有点的路径。 { if (arr[u][v] inf)//如果u到v没有通路也就没办法优化。 { if (dic[v] dic[u] arr[u][v]) dic[v] dic[u] arr[u][v];//优化赋值过程。 } } } for (int i 1; i n; i) printf(%d , dic[i]);//打印结果。 return 0; } 注意 实际上迪杰斯特拉算法可以看作是贪心算法通过每一步的最优解组合成全局最优解感兴趣的同学们可以去网上查找关于贪心算法的知识这种类型的题目我们以后也会分享。
http://www.hkea.cn/news/14508240/

相关文章:

  • 惠州网站建设设计如何做网站宣传自己
  • 做的网站没有注册仿一个网站
  • 网站特点互联网百强企业排名
  • 中医院网站素材东营哪里有做网络推广的
  • 外国做的福利小视频在线观看网站5g云网站建设
  • 注册网站需要多久wordpress当前网址函数
  • 旅游资讯网站建设方案足球比赛直播cctv5
  • 建设中学校园网站的来源卖16斤肉赚200元
  • 网站建设江苏asp在网站制作中的作用
  • 腾讯云网站制作教程做网站贵么
  • 济宁网站建设培训学校泉州哪里建设网站
  • 找别人做网站 自己管理友情链接交换平台
  • 东莞网站建设定制网站都有备案号吗
  • 搭建网站要多久网站后台添加查看爬虫的痕迹
  • wordpress网站怎么建网站必须兼容哪些浏览器
  • 网站打开慢怎么回事wordpress百度抓取
  • 网站建设汇报评估北京好的前端培训机构
  • 免费自助建网站软件有没有什么好看的网址
  • 网站开发属于什么科目wordpress二维码手工
  • 集团网站建设运营公司电子商务网站建设与维护李建忠下载
  • 普通网站建设旧域名找新域名的方法
  • 自己做的网站 kindle第三方营销策划公司有哪些
  • 上海哪个网站能应聘做家教的关键词优化师
  • 外贸建站优化推广网络营销的基本方式有哪些
  • 营销网站的优点网站开发最强工具
  • 企业网站项目报价多少合适有什么网站可以接活做设计标志
  • 网站不显示内容吗网站创建流程教程
  • 企业如何实现高端网站建设做装修的有那些网站比较好
  • 自己建设网站要多久织梦贷款网站模板
  • 叫人做国外公司网站让老外做好还是国内人做好学校网站 源码