各個算法的大致思路和作用:
一、求最小生成樹:
•prim算法:找邊併入,判斷是否會構成環
•Kruscal算法:併入最近的點
二、拓撲排序:一個個的找到入度爲零的點
三、關鍵路徑
四、求最短路:
Dijkstra:找路徑最短的點
Floyd:https://www.cnblogs.com/GumpYan/p/5540549.html
2-22
若無向圖G =(V,E)中含10個頂點,要保證圖G在任何情況下都是連通的,則需要的邊數最少是: (3分)3
- 9
- 36
- 37
- 45
10個頂點,看10-1=9個,看成每個頂點都和其他頂點直接相連,也就是8*9/2=36個,之後加上相連的最後一個,爲37個
一個有N個頂點的強連通圖至少有多少條邊? (2分)b
- null
- N+1
- N
- N(N−1)
- N−1
強連通圖是有向圖,任意的兩點之間可以連通
2-32
如果G是一個有28條邊的非連通無向圖,那麼該圖頂點個數最少爲多少? (3分)B
- null
- 10
- 9
- 8
- 7
2-33
下列說法不正確的是: (2分)B
- null
- 遍歷的基本算法有兩種:深度遍歷和廣度遍歷
- 圖的深度遍歷不適用於有向圖
- 圖的深度遍歷是一個遞歸過程
- 圖的遍歷是從給定的源點出發每一個頂點僅被訪問一次
2-38
下面給出的有向圖中,有__個強連通分量。(2分)B
- null
- 5 ({0}, {1}, {2}, {3}, {4})
- 2 ({1,2,3,4}, {0})
- 1 ({1,2,3,4})
- 1 ({0,1,2,3,4})
強連通分量是在這個分量中任意兩個點有通路
2-2
在N個頂點的無向圖中,所有頂點的度之和不會超過頂點數的多少倍? (2分)A
2-3
- null
- N−1
- (N−1)/2
- 2
- 1
給定無向圖G,從V0出發進行深度優先遍歷訪問的邊集合爲: {(V0,V1), (V0,V4), (V1,V2), (V1,V3), (V4,V5), (V5,V6)}。則下面哪條邊不可能出現在G中? (3分)b
帶進去試試
- null
- (V4,V6)
- (V1,V5)
- (V0,V6)
- (V0,V2)
2-5
已知一個圖的鄰接矩陣如下,則從頂點V1出發按深度優先搜索法進行遍歷,可能得到的一種頂點序列爲: (2分)C
從最開始的節點開始,向後找,如果遇到輸出過的就跳過這一個繼續向右看
- null
- V1,V3,V5,V6,V4,V2
- V1,V3,V5,V2,V4,V6
- V1,V2,V4,V5,V6,V3
- V1,V2,V3,V4,V5,V6
2-7
已知無向圖G含有16條邊,其中度爲4的頂點個數爲3,度爲3的頂點個數爲4,其他頂點的度均小於3。圖G所含的頂點個數至少是:(4分)b
- null
- 15
- 13
- 11
- 10
列方程
-11
設N個頂點E條邊的圖用鄰接表存儲,則求每個頂點入度的時間複雜度爲: (2分)c
- null
- O(N2)
- O(N×E)
- O(N+E)
- O(N)
鄰接表和鄰接矩陣不一樣
鄰接表是:每次訪問一下他的頭結點,之後訪問後面的那些邊,相加
2-21
已知一個圖的鄰接矩陣如下,則從頂點V1出發按廣度優先搜索法進行遍歷,可能得到的一種頂點序列爲: (2分)d
- null
- V1,V3,V5,V6,V4,V2
- V1,V3,V5,V2,V4,V6
- V1,V2,V4,V5,V6,V3
- V1,V2,V3,V5,V4,V6
可以用隊列和棧
2-22
若無向圖G =(V,E)中含10個頂點,要保證圖G在任何情況下都是連通的,則需要的邊數最少是: (3分)d
- null
- 9
- 36
- 37
- 45
2-2
若將n個頂點e條弧的有向圖採用鄰接表存儲,則拓撲排序算法的時間複雜度是:(1分)b
- null
- O(n×e)
- O(n+e)
- O(n2)
- O(n)
拓撲排序就是:
(1)找出入度爲0的頂點,入棧,刪掉他所發出去邊。
(2)開始循環:找到其中一個入度爲零的頂點, 入棧,之後刪除發出的所有的邊
(3)進行循環,一直到圖中沒有節點或者只剩下環爲止
下圖爲一個AOV網,其可能的拓撲有序序列爲: (2分)B
- null
- ADFCEBG
- ABDCEFG
- ACDFBEG
- ABCDFEG
2-2
若要求在找到從S
到其他頂點最短路的同時,還給出不同的最短路的條數,我們可以將Dijkstra算法略作修改,增加一個count[]
數組:count[V]
記錄S
到頂點V
的最短路徑有多少條。則count[V]
應該被初始化爲: (3分)d
到自身至少有一個路徑
- null
count[S]=0;
對於其他頂點V
則令count[V]=1
- 對所有頂點都有
count[V]=0
- 對所有頂點都有
count[V]=1
count[S]=1;
對於其他頂點V
則令count[V]=0
2-3
使用迪傑斯特拉(Dijkstra)算法求下圖中從頂點1到其他各頂點的最短路徑,依次得到的各最短路徑的目標頂點是:(2分)c
- null
- 5, 2, 4, 3, 6
- 5, 2, 6, 3, 4
- 5, 2, 3, 6, 4
- 5, 2, 3, 4, 6
注意要求是把頂點按順序弄出來
這個算法的具體步驟:
(1)先找到一個起始點,寫出他到其他點的距離
(2)找到一個最近的點,標記已經取出並輸出,以他爲標準,更新其他邊的最近距離:有兩種情況
①原來的就是最近的
②爲標準的那個點的長度加上標準點到這個點的路徑的距離比原來的更小,更新
(3)重複上面的過程,知道所有的點都已經輸出了
在AOE網中,什麼是關鍵路徑? (1分)B
關鍵路徑的求法:
先求ve:初始化所有的都是0,之後按拓撲來,只是在消去每一個點的時候都要更新一下ve的值,找到加上消去的點的距離到這個點的距離與原來的這個數的最大值。
再求vl:先初始化爲最長的那個路的大小,之後從這個最遠的按拓撲排序反過來看,找最小的數
- null
- 最長迴路
- 從第一個事件到最後一個事件的最長路徑
- 從第一個事件到最後一個事件的最短路徑
- 最短迴路