原创 桶排序與基數排序與計數基數排序

輸入只有大小小於M的正整數,可以採用桶式排序。 #include <iostream> #include <vector> #include <string> using namespace std; //基數排序 void ra

原创 動態規劃—矩陣乘法排序

矩陣乘法滿足結合律,因此可以選擇不同的乘法順序來進行。矩陣乘法進行的次數等於兩個子序列各自乘法次數加上兩個子序列做一次乘法所需次數。 Mleft,right=Mleft,i+Mi+1,right+cleftcicright M爲

原创 詞梯遊戲

//無權最短路徑問題 #include <iostream> #include <unordered_map> #include <string> #include <vector> #include <queue> using

原创 深度優先搜索尋找割點

如果無向連通圖不存在刪除後剩下的圖不再連通的頂點,則該圖爲雙連通。如果不是雙連通的圖,那麼那些刪除後剩下的圖不再連通的頂點叫做割點。 執行深度優先搜索,按照搜索順序給頂點編號Num。然後後序遍歷,計算頂點的Low值,其爲頂點通過

原创 生成迷宮並找出走出迷宮的路徑

利用不相交集類生成迷宮,具體見 http://blog.csdn.net/blubluhao/article/details/76445377 然後利用無權圖的最短路徑選擇找出走出迷宮的路徑,具體見 http://blog.c

原创 利用unity實現簡單的貪喫蛇遊戲

首先創建一個頭部,編寫腳本利用WASD控制頭部的移動。 Vector3 up=new Vector3(0,1,0); Vector3 down=new Vector3(0,-1,0); Vector3 le

原创 不相交集類

union採用按高度求並,find採用路徑壓縮。存儲的高度值爲實際高度的負值減一。 #include <vector> using namespace std; class DisjSets { public: expli

原创 Dijkstra算法那--賦權最短路徑

相對於無權最短路徑,賦權最短路徑多了一個成員know來標記頂點是否已知。從未知的頂點中找到路徑最短的頂點,標記爲已知,然後如果它的未知鄰接頂點距離dw大於dv+Cv,w,則更新dw。 頭文件 #include <vector>

原创 無權最短路徑選擇

圖類的數據成員除了頂點的集合外還有一個記錄起始頂點的數據成員。頂點的數據成員有距離起始頂點的最短距離,鄰接表,最短路徑上頂點的上一個頂點三個數據成員。首先將起始頂點入隊,距離爲零,然後將其出隊,更新其鄰接頂點的距離並把它們放入隊列

原创 快速選擇

快速選擇和快速排序類似,將數組分爲S1和S2。當K值小於S1的的長度時,對S1進行遞歸。當k值剛好等於pivot時,那麼已經找到了。當k值大於S1長度加一時,對S2進行遞歸。最後K始終在數組下標k-1的位置。 #include <

原创 可變長度的基數排序

字符串的比較是從高有效位開始依次比較,和長度沒有太大關係。因此可以理解爲末尾補零,長度相同。先將字符串按長度進行排序,然後從低有效位開始比較,對零(沒有的位)不進行處理(已經在正確的位置)。 #include <iostream>

原创 測試一個大數是否是素數

如果P是素數,且0 < A < P,那麼AP-1≡1(mod P)。 利用這個定理判定N是否爲素數,隨機生成一個A,1 < A < N-1,如果得到餘數不是1,則N不是素數。如果餘數是1,則N很可能是素數。如果要降低錯誤率,需要添