原创 最短路徑(Floyd-warshall)

求圖中任意兩點的最小距離: Floyd關鍵代碼 //關鍵算法 for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;i<=n;i++)

原创 Bellman-Ford -解決負權邊

Dijkstra 算法終於理解,但是不能有負權邊, 讓我們看看BellmanFord 核心代碼: for(k=1;k<=n-1;k++) for(i=1;i<=m;i++) if(dis[v[i]] > d

原创 Dijkstra 算法-通過邊實現鬆弛

一個點(源點) 到其餘哥哥頂點的最短路徑:單元最短路徑。 算法步驟如下: 1。將所有的頂點分爲兩部分:已知最短路程的頂點集合p和未知最短路徑的集合頂點集合Q。最開始,已知最短路徑的頂點集合p只有源點一個頂點,我們這裏可以用一

原创 最小編輯距離

今天在回顧一下動態規劃問題: 動態規劃分成四步: 1.定義最優子問題: 2。定義狀態 3.定義決策和狀態轉換方程 4.確定邊界條件: 已編輯距離爲例: 1。source[1..n]的字符轉換爲target[1…m]

原创 廣度優先遍歷

還是上面那道題: 深度遍歷一般是用遞歸,深度不斷增加,廣度搜索一般用隊列這樣的形式存儲東西; #include <iostream> #include <cstdio> using namespace std; stru

原创 桶排序

看完啊哈算法:這時候應該總結一波,感謝兵哥 桶排序: 代碼如下: #include <stdio.h> int main() { int book[1001];//桶的個數 int i,j,t,n;

原创 深度遍歷

就以迷宮爲例吧。 代碼如下: //深度搜索:解救小哈 #include <iostream> #include <cstdio> using namespace std; int a[51][51],book[51][5

原创 二分匹配

二分匹配: 參考《算法的樂趣》 Gale-Shapley 算法原理: /*算法: M:男生狀態, W女生狀態 初始化所有的m 屬於 M , w 屬於W, m,w處於自由狀態; while(存在m是自由的,並且他還沒對每個女人都

原创 深度優先遍歷,廣度優先遍歷

深度優先遍歷思想:以一個未訪問的節點爲起始頂點,沿當前頂點的邊走到位訪問的頂點;當沒有未訪問的節點時回溯到上一個頂點,繼續試探別的頂點。 廣度搜索: 一般建立一個隊列。當所有邊的權值相同的情況下,廣度搜索的時間更快。

原创 歡迎使用CSDN-markdown編輯器

歡迎使用Markdown編輯器寫博客 本Markdown編輯器使用StackEdit修改而來,用它寫博客,將會帶來全新的體驗哦: Markdown和擴展Markdown簡潔的語法 代碼塊高亮 圖片鏈接和圖片上傳 LaTex數學公

原创 並查集

最近才知道並查集是分類用,以前太naive了,現在也很naive。 並查集本質是維護一個森林,剛開使的時候,森林每個點是孤立的,也可以理解每個點是一個樹,通過一個條件,將這些樹合併成一個大樹。 並查集的主要兩個是Union 和 f

原创 圖的最小生成樹

先介紹prim算法: 算法: 1,從任意一個頂點開始構造樹,假設從1號點,首先將頂點1加入生成樹,用一個以爲數組book來標記哪些頂點加入了生成樹 2.用數組dis記錄生成樹到各個頂點的距離,最初生成樹只有1號頂點,有直

原创 轉換算法(中文數字轉阿拉伯數字)

題解: 1.權位:如一千二百三十 1的權位是千,節以萬爲節 規則1:以10000爲小節,小節的結尾即使是0,不使用0, 規則2:小節內兩個非0的數之間使用0 規則3:當小節的千位事0,若小節的前一小節若無其他數字,則不用0,

原创 建堆和堆排序

從小到大建立最大堆,不建立最小堆 下面代碼很清晰,是啊哈c中的代碼,註釋很好。 這裏涉及建堆,向下壓,堆排序。good code。 #include <iostream> #include <cstdio> using

原创 快速排序

快速排序: 首先找一個基準數: (參照的數,一般是第一個); 例如:6 1 2 7 9 3 4 5 10 8 算法過程:先從右往左找一個小於 6 的書,然後交換他們,可以用變量i,j分別指向序列的最左最又。 修改過程回去看