最近看的是最短路問題,最短路有四種方法,不同的方法適應條件和效率也不一樣。最簡單的是floyed演算法,三重迴圈遍歷,要注意的是最外層表示的是中間節點。最常用的是dijkstra,演算法主要是思想是:
思想:
1.首先初始化乙個點到其本身距離為0,到其它點距離為無窮,記錄距離點為e[i][j],初始化所有點;
2.然後,接著初始化頂點到其它點的距離,記為dis[i],在正式表示頂點演算法中dis[i]儲存最小距離。初始化是到某乙個點i的距離,初始化方式是dis[i]=e[1][i];
3.接著,標記元素,沒訪問過的記為q集合,用visit[i]=0表示;訪問過的記為p集合,用visit[i]=1表示;
4.預處理完畢,第一層迴圈,以i表示1...n-1,裡面的乙個迴圈是找到距離i最近的點,標記已經訪問過;
5.裡面的另一層迴圈是找到剛剛找到的距離第i個頂點距離最短的點,記為u;然後找u到v最短距離;
6.如果v點未被列舉且dis[v]>dis[u]+e[u][v],那麼就更新dis[v]的值;
7.繼續遍歷,直到所有元素都被標記為visit[i]=1;
其中做到的最典型的的乙個題是 要注意方西是雙向聯通的;
還有兩個演算法沒有做到典型題,週末補一下;感覺圖論這一部分就是知識點比較多聯絡性比較大,就像dfs,bfs幾乎大多數題都要用到,尤其是深度優先搜尋,非常常用的乙個演算法,每次做的題型別都不一樣,但是思想都是差不多,引數不同,要設定函式適當的引數;還有就是有的題需要剪枝,例如乙個比較簡單的:還有的深搜要設定好引數,引數不同,做法也不一樣,就像乙個題:
週末還要抽出一定時間看四個常用最短路演算法,把例題看一下,關鍵是把演算法思想徹底理解,再做幾道搜尋題目。
週中訓練總結
這周剛剛開學,事情還是比較多的,我還是沒課就來集訓室刷題看題,感覺自己每天都有一些小進步吧,周一滿課,上課完全好似一種享受,因為我能從老師的講述中擴充套件出我自己的思考,不過看數論題質量不高。周二只有一節空課,去了集訓室刷了一道codeforce a。一道題刷了整整2小時。補上了atcoder的題目...
第二週訓練總結
這周收穫還是蠻大的,但dp內容涉及不多,關於stl應用上有了些許長進 比如 在有序的maxx陣列裡尋找比minn i 大的元素個數 maxx.end upper bound maxx.begin maxx.end minn i 以及字首和的應用。熟悉了乙個函式 getline cin,line 以及...
ACM周訓練總結(三)
不知不覺,周訓練總結已經到了第三篇,本週依然是進行了貪心演算法的相關訓練,在本週的做出的題目中,我認為具有代表性的,最簡單的可用貪心解決的題目是 書架一題 書架一題 書架 貪心 這是一道典型的最優選擇的問題 即給出 n 個物品,第 i 個物品的量為 wi,選擇盡量少的物品,使得其總量超過 c 其貪心...