選擇演算法:單源最短路徑 ?
演算法概述:
步驟分析:
假設有個圖,我們給它命名為g,需要計算它的最短路徑,得有個起點,所以設定起點為s
因為走遍圖找到路徑需要經歷 「走過的最短路徑」和「沒走過的所有路徑」這兩種狀態。所以我們設定兩個存資料的集合m,n ;
m表示記錄了已經走過的最短路徑,n表示沒走過的所有路徑。
初始化,集合m只包含起點,集合n只包含除起點外的所有點,
在集合n中找到距離起點s最短的點p1,然後將p1加入到集合m中,同時將p1點從集合n中移出(變數設定為ftrue即可表示)不再作為需要查詢的點,下一次搜尋的起點從p1的位置開始。
const
int int =
9999
;//設定最小距離為9999,這樣設定是因為我們要一直執行程式,當每兩個點的距離都小於9999時,將繼續執行下一步,讓程式走下去,但是該距離9999不錄入集合m和集合n的計算中
const
int max =10;
//設定全圖點的最多數量為10
int dist[max]
;//表示最短距離的集合m,該集合m中每個陣列的元素儲存著兩點之間的最短距離
int path[max]
;//用於記錄找到的最短路徑的點的號碼
int a[max]
[max]
;//表示繼p點之後下乙個我們需要尋找的點(也即文件寫的p2,持續到下一步,一直到pn)
//v表示目的地的點
void
dijkstra
(int v)
dist[v]=0
;//初始化終點的值
n[v]
=true
;//設定為true表示已走過該點,則該點從集合中剔除,在上面的文件中,我寫的是p點,在這裡用陣列n[v]設定為true代替了
for(
int i =
2; i <= n; i++
) n[p]
=true
;//設定該點p已經經過
for(
int j =
1; j <= n; j++)}
}}}}
演算法設計與分析 貪心演算法
time limit 1000 ms memory limit 65536 kib problem description 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生乙個最優解。對於給定的n和k個加油站位...
演算法設計與分析 貪心演算法
分解 將原問題求解過程劃分為連續的若干個決策階段 決策 在每乙個階段依據貪心策略進行貪心決策,得到區域性的最優解,並縮小待求解問題的規模 合併 將各個階段的區域性解合併為原問題的乙個全域性最優解 greedy c c是問題的輸入集合即候選集合 初始解集合為空集 while not solution ...
演算法設計與分析 貪心演算法
所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型...