第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

L2-001 緊急救援(dijkstra)

標(biāo)簽:
C++

题目:

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

dijkstra算法:

dijkstra算法是贪心算法在求解路径问题上的应用。

作用:dijkstra算法能够解决边权非负的加权有向图的单起点最短路径问题。也就是说,规定一个起点,就能够得到这个加权有向图中其他点距该起点的最短距离。

数据结构:数组known[ ]用于标记这些点的状态(已知、未知); 数组dis[ ],也就是下表中的dv,表示每个点到起点的距离,附初值时,除了起点自身,其他的点到起点的距离都设为无穷,在实际编程时,可用定义一个很大的数(比如99999999)作为常量为其赋值;数组pre[ ],也就是下表中的pv,表示引起dv变化的最后一个顶点,也就是以这种路径到达这个点经过的前一个点。

算法:以下面这个加权有向图为例,并假设开始结点为v1。初始配置如图9-12所示。每次更新下图的表格,算法都会选择未知的点中dv最小的一个标记为已知,然后去寻找这个点的下几个邻接点,如果该邻接点到这个已知点的距离加上这个已知点的dv小于该邻接点的dv,那么更新dv和pv,这其实就是从这个已知点这里走会更近的意思;如果该邻接点是已知的就跳过(因为每一次都是先将dv最小的点标记为已知,所以该点的dv不会更小)。

                                                                                 过程如图:

 

下表是每次更新的表格。在下面我直接把书上的讲解搬上来,书是《数据结构与算法分析:C语言描述》。

 

 

 

 

 思路:

 了解了dijkstra 以后,再来看这道题,发现题目就是在这个算法的基础上加了一个“救援队”和经过的结点数。那么我们在表格后多加两列就ok了,也就是在程序中加两个数组。最后按顺序输出路径那里使用了递归,具体见代码。

知识点for me:

1、fill()可以按照单元赋值,将一个区间的元素都赋同一个值,它在头文件<algorithm>里面。

     它可以赋值任何,比如int数组:fill(arr, arr + n, 要填入的内容); 比如vector:fill(v.begin(), v.end(), 要填入的内容); 比如二维数组fill(f[0], f[0]+N*N, 要填入的内容);

 【C++】fill函数,fill与memset函数的区别 

 

上代码:

第一次写dijkstra,一些数组的命名感觉不是那么合适,将就看吧。

作者:小泰格儿

原文链接:https://www.cnblogs.com/littleLittleTiger/p/10465965.html


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消