資料結構PTA 基礎實驗6 2 1 列出連通集

2021-10-08 13:04:26 字數 2138 閱讀 4177

給定乙個有n個頂點和e條邊的無向圖,請用dfs和bfs分別列出其所有的連通集。假設頂點從0到n−1編號。進行搜尋時,假設我們總是從編號最小的頂點出發,按編號遞增的順序訪問鄰接點。

輸入格式:

輸入第1行給出2個整數n(0輸出格式:

按照""的格式,每行輸出乙個連通集。先輸出dfs的結果,再輸出bfs的結果。

輸入樣例:

8 6

0 70 1

2 04 1

2 43 5

輸出樣例:

思路

這就是一道深度優先遍歷和廣度優先遍歷的題目。

因為此圖的頂點較少,可以使用鄰接矩陣儲存,並且不必要用動態矩陣。

在進行深度優先遍歷時,只需要用好visited陣列即可,保證下次迭代訪問的頂點不僅是此時的鄰接點,還要求沒有被訪問。

在進行廣度優先遍歷時,需要涉及到佇列的操作:建立乙個空隊、頂點入隊、頂點出隊、判斷隊是否為空。在這裡為了簡便起見,用陣列作為隊的構成方式,當然也可以用鍊錶。

廣度優先遍歷需要剛開始的時候就入隊乙個頂點,然後進入while迴圈,只要隊不空,這個迴圈一直做。迴圈內就是彈出佇列的乙個頂點,然後按照大小順序,遍歷此點的所有鄰接點,並把這些點入隊。

實現

#include

#include

#define maxn 10

#define infinity 100000

#define maxsize 10+1

typedef

int weighttype;

typedef

int vertex;

typedef

struct qnode *queue;

struct qnode

;typedef

struct gnode *ptrtognode;

typedef ptrtognode mgraph;

struct gnode

;typedef

struct enode *ptrtoenode;

typedef ptrtoenode edge;

struct enode

;mgraph creategraph

(int vertexnum)

void

insertedge

(mgraph graph, edge e)

mgraph buildgraph

(int vertexnum,

int edgenum)

return graph;

}void

visit

(vertex i)

int visited[maxn]=;

void

dfs(mgraph graph, vertex v,

void

(*visit)

(vertex))}

queue createqueue()

void

addq

(queue q, vertex v)

vertex deleteq

(queue q)

intisemptyq

(queue q)

void

bfs(mgraph graph, vertex v,

void

(*visit)

(vertex))}

}}intmain()

\n");}

startpoint++;}

//clear the visited

for(startpoint =

0; startpointnv; startpoint++

) visited[startpoint]=0

; startpoint =0;

while

(startpoint < graph->nv)

\n");}

startpoint++;}

return0;

}

資料結構PTA 基礎實驗6 2 2 漢密爾頓迴路

著名的 漢密爾頓 hamilton 迴路問題 是要找乙個能遍歷圖中所有頂點的簡單迴路 即每個頂點只訪問 1 次 本題就要求你判斷任一給定的迴路是否漢密爾頓迴路。輸入格式 首先第一行給出兩個正整數 無向圖中頂點數 n 21 v 2 vn 其中 n 是迴路中的頂點數,vi是路徑上的頂點編號。輸出格式 對...

pta資料結構

是否二叉搜尋樹 這題只要是了解二叉查詢樹的特點。bool isbst bintree t while right1 return isbst t left isbst t right 線性探測法的查詢函式 主要注意雜湊函式,這裡那個常量是真的坑,卡了半天。position find hashtabl...

PTA資料結構單選

最近學習資料結構鍊錶,被每週作業題所困。現做題解,以此共勉。析 不帶頭節點的單向鍊錶,一定具有頭指標,且在這兒以頭指標冠以鍊錶名。頭指標指向第乙個節點的儲存位置。向空鍊錶插入元素,則讓該插入元素的鏈結位址為h 第乙個節點的位置 再使頭指標h指向該元素。析 頭節點 位於首節點之前,為空,則鏈結位址為n...