由於準備美賽,所以提前看一下相關書籍。
參考:資料建模演算法與應用(第二版),
dijkstra演算法是典型最短路演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。
dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。
dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用open, close表方式,drew為了和下面要介紹的 a* 演算法和 d* 演算法表述一致,這裡均採用open,close表的方式。
其採用的是貪心法的演算法策略
建立兩個表,open, close。
open表儲存所有已生成而未考察的節點,closed表中記錄已訪問過的節點。
1. 訪問路網中距離起始點最近且沒有被檢查過的點,把這個點放入open組中等待檢查。
2. 從open表中找出距起始點最近的點,找出這個點的所有子節點,把這個點放到close表中。
3. 遍歷考察這個點的子節點。求出這些子節點距起始點的距離值,放子節點到open表中。
4. 重複第2和第3步,直到open表為空,或找到目標點。
具體以書中例子為例:
eg:某公司在6個城市c1,c2,c3,c4,c5中有分公司,從c1到cj的直接航程票價記在下屬鄰接矩陣中(空格代表無效)。尋找一條c1到其他城市的最便宜的路線。
變數解釋:index1,index2,index3分別用來存放標號資訊的,標號定點順序,標號頂點索引,從始點到終點(result)的通路。
index2存放起始點到第i點的最短通路的第i頂點前一頂點的序號。
例如上述示例,c1到c5的通路為1->3->5。
當然,在記錄路徑資訊的時候也可參照下面c++的方法把所有的最短通路的資訊都顯示出來(通過index2)。
c++:
#include#define maxnum 765432100結果:using
namespace
std;
ifstream fin(
"dijkstra.in.txt");
ofstream fout(
"dijkstra.out.txt");
int map[100][100
];bool is_arrived[100
];int dist[100], from[100], stack[100
];int
p, q, k, path, source, vertex, temp, setcard;
intfindmin()
return
temp;
}int
main()
for (p = 1; p <= vertex; p++)
is_arrived[source] = true
; setcard = 1
;
do }
else
break
; }
while (setcard !=vertex);
for (p = 1; p <= vertex; p++)
if (p !=source)
else
fout
<< "
path:
"<
for (q = k - 1; q >= 1; q--)
fout
<< "
-->
"<
}fout
<< "
\n********************====\n\n";
}fin.close();
fout.close();
return0;
}
********************====lingo解法請見dijkstra 二。source:1
target:2
distance:90
path:1-->3-->5-->2
********************====
********************====
source:1
target:3
distance:40
path:1-->3
********************====
********************====
source:1
target:4
distance:60
path:1-->3-->4
********************====
********************====
source:1
target:5
distance:70
path:1-->3-->5
********************====
演算法 Dijkstra演算法筆記
參考文章 隨記參考邏輯 dijkstra演算法採用的是一種貪心的策略。演算法的基本思想是 通過不斷更新的距離陣列,每次從距離陣列找到離源點最近的乙個且沒有掃瞄過的節點,然後以該頂點為中心進行bfs擴充套件,直到所有節點都掃瞄一遍,最終得到源點到其餘所有點的最短路徑 1 起點固定,若要記錄到達路徑,則...
日日演算法 Dijkstra演算法
dijistra演算法作為一種最短路徑演算法,可以用來計算乙個節點到圖上其他節點的最短距離。主要是通過啟發式的思想,由中心節點層層向外拓展,直到找到中點。適用於無向圖和有向圖。假設我們要計算節點a到其它節點的最短距離 引入兩個集合 s,u 其中集合s表示已經求出最短路徑的點 以及最短距離 集合u表示...
演算法學習整理 一 Dijkstra
假設構建的是一副無向圖 圖中有0 6 7個點,每段線表示從乙個點到另乙個點的值 dijkstra演算法的目的是找到乙個點到另乙個點的最短路徑 假設已經構建好了圖的關係,並選取了起始點a1 思路 初始化兩個點集合s和u,s包括起點a1,u包括剩餘點,遍歷計算s中點到u中點的最短距離,不相鄰 連線的距離...