1. 程式人生 > >資料結構(七) 圖

資料結構(七) 圖

好,時隔好多好多日,終於到了第7章 圖 了!

1. 填空題

⑴ 設無向圖G中頂點數為n,則圖G至少有( )條邊,至多有( )條邊;若G為有向圖,則至少有( )條邊,至多有( )條邊。

答案:0,n(n-1)/2,0,n(n-1)
解析:
圖的頂點集合有窮非空的,而邊集可以是空集邊數達到最多的圖稱為完全圖,在完全圖中,任意兩個頂點之間都存在邊

⑵ 任何連通圖的連通分量只有一個,即是( )。

答案:其自身
解析:
連通分量:指的是無向圖中的極大連通子圖

⑶ 圖的儲存結構主要有兩種,分別是( )和( )。

答案: 鄰接矩陣,鄰接表

⑷ 已知無向圖G的頂點數為n,邊數為e,其鄰接表表示的空間複雜度為( )。

答案:O(n+e)
解析:
無向圖的鄰接表中,頂點表有n個結點邊表有2e個結點,共有n+2e個結點,其空間複雜度為O(n+2e)=O(n+e)。

⑸ 已知一個有向圖的鄰接矩陣表示,計算第j個頂點的入度的方法是( )。

答案:第j列所有元素之和
這裡寫圖片描述
vexs代表頂點,arcs代表鄰接矩陣
結合圖來看,第i個頂點的出度即為第i行所有元素之和

⑹ 有向圖G用鄰接矩陣A[n][n]儲存,其第i行的所有元素之和等於頂點i的( )。

答案:出度

⑺ 對於含有n個頂點e條邊的連通圖,利用Prim演算法求最小生成樹的時間複雜度為( ),利用Kruskal演算法求最小生成樹的時間複雜度為( )。

答案:O(n2),O(elog2e)
解析:
Prim演算法採用鄰接矩陣做儲存結構,適合於求稠密圖的最小生成樹;
Kruskal演算法採用邊集陣列做儲存結構,適合於求稀疏圖的最小生成樹。
好吧,我就猜你不知道稀疏圖和稠密圖的劃分
這裡寫圖片描述

(8) 在一個有向圖中,若存在弧<vi, vj>、<vj, vk>、<vi, vk>,則在其拓撲序列中,頂點vi, vj, vk的相對次序為( )。

答案:vi, vj, vk
解析:對由頂點vi, vj, vk組成的圖進行拓撲排序。
這裡寫圖片描述
步驟:
1、在有向圖中選一個沒有前驅的頂點且輸出之
2、從圖中刪除該頂點和所有以它為尾的弧

2. 選擇題

(1)在一個無向圖中,所有頂點的度數之和等於所有邊數的( )倍。

A 、1/2
B、 1
C、 2
D、 4

答案:C
解析:
來,你動動手隨便畫一個圖出來,看看到底是不是2倍。

(2)n個頂點的強連通圖至少有(  )條邊,其形狀是( )。

A、 n
B、 n+1
C、 n-1
D 、n×(n-1)
E 、無迴路   F 、有迴路   G、環狀    H 、樹狀

答案:A和G
解析:
強連通圖必須從任何一點出發都可以回到原處,
每個節點至少要一條出路(單節點除外)
至少有n條邊,正好可以組成一個環

(3)含n 個頂點的連通圖中的任意一條簡單路徑,其長度不可能超過( )。

A、 1
B、 n/2
C、 n-1
D、 n

答案:C
解析:
連通圖:對於圖中任意兩個頂點A和B,都是連通的,即有路徑可以從A點到B點。
簡單路徑:序列中頂點不重複的路徑,即沒有迴路。

(4)對於一個具有n個頂點的無向圖,若採用鄰接矩陣儲存,則該矩陣的大小是( )。

A 、n
B 、(n-1)2
C、 n-1
D 、n2

答案:D(n的平方)
解析:
好像就是n*n,就這麼不講道理

(5)圖的生成樹(  ),n個頂點的生成樹有( )條邊。

A、 唯一     B、 不唯一    C 唯一性不能確定
D 、n
E、 n +1
F 、n-1
答案:C和F
解析:
這裡寫圖片描述
這個就是最小生成樹,可以由prim演算法或者kruskal演算法得出,根據其過程可以想象唯一性是不確定的。

(6)對如圖所示的無向連通網圖從頂點d開始用Prim演算法構造最小生成樹,在構造過程中加入最小生成樹的前4條邊依次是( )。
這裡寫圖片描述

A 、(d, f)4, (f, e)2, (f, b)3, (b, a)5
B、 (f, e)2, (f, b)3, (a,c)3, (f, d)4
C、 (d, f)4, (f, e)2, (a, c)3, (b, a)5
D 、(d, f)4, (d, b)5, (f, e)2, (b, a)5

答案:A
解析:
需要執行Prim演算法,其簡便做法如下:先將頂點d塗黑,然後選取一個頂點塗黑另一個頂點未塗黑的權值最小的邊,為(d, f)4;然後將頂點f塗黑,選取一個頂點塗黑另一個頂點未塗黑的權值最小的邊,為(f, e)2;然後將頂點e塗黑,再選取一個頂點塗黑另一個頂點未塗黑的權值最小的邊,為(f, b)3或(e, b)3;然後將頂點b塗黑,再選取一個頂點塗黑另一個頂點未塗黑的權值最小的邊,為(b, a)5。
(7)設有如圖所示的AOE網,則事件v4的最早開始時間是( ),最遲開始時間是( ),該AOE網的關鍵路徑有( )條。
這裡寫圖片描述

A 、11
B、 12
C 、13
D 、14
E 、1
F、 2
G、 3
H、 4

答案:C,C,F
解析:
事件v4的最早開始時間是從頂點v1到v4的最長路徑長度13,事件v4的最遲開始時間=min{事件v6的最遲發生時間-11, 事件v5的最遲發生時間-9}={24-11, 22-9}=13。該AOE網的兩條關鍵路徑如圖所示。
這裡寫圖片描述

相關推薦

資料結構

好,時隔好多好多日,終於到了第7章 圖 了! 1. 填空題 ⑴ 設無向圖G中頂點數為n,則圖G至少有( )條邊,至多有( )條邊;若G為有向圖,則至少有( )條邊,至多有( )條邊。 答案:0,n(n-1)/2,0,n(n-1) 解析:

重學資料結構

@[Toc] >圖是一種比線性表和樹更為複雜的資料結構。線上性表中,資料元素之間僅有線性關係,每個資料元素只有一個直接前驅和一個直接後繼;在樹形結構中,資料元素之間有著明顯的層次關係,並且每一層中的資料元素可能和下一層中的多個元素(即其孩子結點)相關,但只能和上一層中一個元素(即其雙親結點)相關; 而在

資料結構十三的遍歷

圖的遍歷 1. DFS 深度優先搜尋(Depth First Search),類似於樹的先序遍歷 void DFS ( Vertex V ){ visited[ V ] = true; for ( V 的每個鄰接點 W ) if( !visited

再談資料結構

1 - 引言 圖(Graph)描述的是一些個體之間的關係。與線性表和二叉樹不同的是:這些個體之 間既不是前驅後繼的順序關係,也不是祖先後代的層次關係,而是錯綜複雜的網狀關係。 圖也是資料結構中經常使用的一種結構,讓我們來學習一下使用圖的演算法吧 2 - 用DFS求連通塊 例題

資料結構——樹結構(Tree) 之二叉樹的常用操作

一.鏈式儲存的二叉樹的操作 1.遍歷二叉樹 先序遍歷:根-->左-->右 中序遍歷:左-->根-->右 後序遍歷:左-->右-->根 2.二叉樹結點的查詢  結點的查詢也可以分為先序查詢,中序查詢和後序查詢。方式和遍

資料結構

稀疏矩陣三元組(順序結構)此處有前提稀疏矩陣有以下特點:    1.大量數值為0的元素    2.非零元素分佈沒有規律這兩點的描述都比較含糊,不夠理性,一般來說是自己把握的。也是因為這兩點特性,所以才能比較自然地理解這種資料結構。先看執行結果如下:原始碼如下:#define

資料結構---演算法篇

圖-常用演算法 4. 圖的連通性問題 在無向圖中,如果無向圖是連通圖,僅需從任意一點出發,進行深度優先搜尋或廣度優先搜尋,邊可訪問到圖中所有頂點。對非連通圖,則多個頂點出發進行搜尋,而每一次從一個新的起始點出發進行搜尋過程中得到的頂點訪問序列恰為

資料結構二叉樹節點、空指標、刪除葉節點、最大節點數

1、二叉樹節點 程式碼: //二叉樹節點 #include<stdio.h> #include <malloc.h> #include <conio.h> #include<iostream> // typedef int

資料結構線性表

Status GetElem(SqList L, int i, ElemType *e) { if(L.length == 0 || i < 1 || i > L.length)

資料結構之樹

二叉查詢樹查詢插入和刪除的時間複雜度都為O(log N)。但它有個弊端。如果輸入的資料是排序資料,那麼代價巨大,因為樹將只由那麼沒有左(或右)兒子的節點組成。一種解決方法是找平衡條件:任何節點的深度不能過深。最老的一種平衡查詢樹,即AVL樹。另外,較新的方法是放棄平衡條件

Java資料結構和演算法的DFS和BFS

DFS+BFS import java.util.*; //以無向圖為例,實現圖的深度優先搜尋和廣度優先搜尋 class Graph{ public int[][] adjacencyMatrix;//鄰接矩陣,1代表有邊,0代表沒有邊 public int arcNumb

資料結構的儲存方式

鄰接表 #define MAX 20 typedef struct ArcNode{ int adjvex;//該弧指向的頂點的位置 struct ArcNode *nextarc;//指向下一條弧的指標 int *info; //該弧相關資訊的指標 }Arc

數據結構二叉樹

廣度優先 -1 XML -o 滿二叉樹 nal 如果 數據 中序 定義 特點 特殊的二叉樹 斜樹 顧名思義,其中的結點都只有一個,又分為左斜樹和右斜樹,這時候又有疑惑了,這種數據結構不是有線性表一樣嗎,沒錯,線性表是一種特殊的樹 滿二叉樹 完全二叉樹

數據結構——雙向鏈表

ear opera osi clas link ges 逆序 位置 -o 數據結構(七)——雙向鏈表 一、雙向鏈表簡介 1、單鏈表的缺陷 單鏈表只能從頭結點開始訪問鏈表中的數據元素,如果需要逆序訪問單鏈表中的數據元素將極其低效。 2、雙向鏈表的結構 雙鏈表是鏈表的一種,由節

數據結構兩棧共享空間

編程 行操作 開始 結構 n-1 容量 兩個棧 java語言 語言   一、棧的順序存儲的一個很大的缺陷就是必須事先確定數組存儲空間大小,萬一不夠用了,就要用編程手段來擴展數組的容量,非常麻煩。   二、對於一個棧,也只能盡量考慮周全,設計出合適大小的數組來處理;但是對於兩

數據結構---最短路徑弗洛伊德算法

直接 char getchar 更新 none typedef article truct 使用 一:定義 弗洛伊德算法是用來求所有頂點到所有頂點的時間復雜度。 雖然我們可以直接對每個頂點通過迪傑斯特拉算法求得所有的頂點到所有頂點的時間復雜度,時間復雜度為O(n*3)

數據結構排序---希爾排序

incr 最好的 直接插入排序 增量 www ref 必須 初始 html 圖解排序算法(二)之希爾排序 定義 希爾排序是希爾(Donald Shell)於1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱為縮小增

數據結構排序---排序知識點總結

至少 pla 有序 rdquo 穩定 href 比較 cli tar 回顧:排序分類 (一)插入類 直接插入排序 折半插入排序 希爾排序 本質還是插入排序 (二)交換類 冒泡排序 快速排序 (三)選擇類 簡單選擇排序 堆排序 (四)歸並類

JavaScript 資料結構: 連結串列

前言 從實用性角度來說,連結串列對Javascript 來說沒有任何價值,為什麼呢? 我們先了解連結串列的特性,這個特性我們放在c++前提下來說,因為 這個特性是 根據 記憶體特性 來闡述的,Javascript 不存在記憶體操作,所有資料型別,本質性繼承Object 物件,而Ob

資料結構

***********************特殊的線性表-------棧**************************** 棧: 先進後出、後進先出 棧的插入運算 叫做入棧 棧的刪除運算 叫做出棧 演示程式碼: package com.chapter11; //棧的介面public int