演算法設計與分析作業(1)

2021-08-10 17:47:42 字數 1258 閱讀 6096

1.dijkstra求單源最短路徑

先進行存圖操作,將帶權有向圖用鄰接矩陣來表示;

for(int i=0;i>u>>v>>dist;  

map[u][v]=dist;

}

用dis陣列來儲存0點到其他每乙個點的最短距離,初始時dis[i] = map[0][i];接下來進行鬆弛操作,找出最短距離

首先0點為q集合中的點,0-1,0-3,0-4中最短的為0-1,得到0-1之間最小值;

將1點加入q集合,0-3,0-4,1-2,中最短為0-3,標記3點;

將3點加入q集合,0-4,1-2,3-4,3-2中最短為3-2,標記2點;

將1點也加入q集合,0-4,1-2,3-4,2-4中最短為2-4,標記4點;

0點到所有點的最短距離。.

for(int i = 1; i <= n; i ++)  

dis[0] = 0;

v[0] = true; //初始點集合都為真

for(int i = 1; i < n; i ++)

} v[pos] = true;

for(int j = 0; j < n; j ++)

} }

2.最小生成樹prim與kruskal求解過程

3.會場安排問題

若優先選擇結束時間早的,這樣就可以騰出盡可能多的時間供接下來的活動使用,可行。

所以使用貪心演算法,優先選擇結束時間早的活動。

將活動按照結束時間進行從小到大排序。然後用i代表第i個活動,挑選出結束時間盡量早的活動,並且滿足後乙個活動的起始時間晚於前乙個活動的結束時間,全部找出這些活動就是最大的相容活動子集合。

系統檢查活動i是否與當前已選擇的所有活動相容。若相容活動i加入已選擇活動的集合中,否則,不選擇活動i,而繼續下一活動與集合中活動的相容性。若活動i與之相容,則i成為最近加入集合的活動,並取代活動j的位置。

int arrangingactivities(int n)  

} return count;

}

演算法分析與設計 作業1

問題 舉乙個例項,畫出採用prim演算法構造最小生成樹的過程 1 首先選定頂點1加入最小生成樹集合 2 以頂點1作為最小生成樹集合,尋找到其餘頂點構成的未選集合中權值最小的一條邊,此處尋找到頂點2,並將頂點2加入集合。3 以頂點2 3作為最小生成樹集合,尋找至其餘頂點構成集合權值最小的邊,此處找到頂...

演算法設計與分析 作業1

1 舉乙個例項,畫出採用prim演算法構成最小生成樹的過程 2 舉乙個例項,畫出採用kruskal演算法構成最小生成樹的過程 1 prim演算法 隨意選取起點,在前一步的基礎上尋找最小權值,直到連通n個頂點。2 kruskal演算法 把所有的邊按照權值先從小到大排列,接著按照順序選取每條邊,如果這條...

演算法設計與分析 1

實驗題目 生成兩個隨機的圖,乙個有向圖乙個無向圖。有向圖兩千條邊左右,無向圖一千條邊左右,邊的數量是大概的。100個頂點。要求能算出每個頂點的度。要求每次圖是隨機生成的,並且有良好的結構。今後的實驗都基於這個圖結構。任意語言和環境。建議鍊錶描述。然後基於這個圖實現乙個廣度優先搜尋。參考文獻 c 中的...