PTA 資料結構與演算法 7 6 列出連通集

2021-09-22 16:36:06 字數 1735 閱讀 1601

如有不對,不吝賜教

直接進入正題:

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

輸入格式:

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

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

輸入樣例:

8 60 7

0 12 0

4 12 4

3 5輸出樣例:

這就是十分基本的搜尋問題,bfs和dfs的區別在於:前者是一層一層的搜尋,而後者則是一條路走到底,撞了南牆才回頭

下面給**:

#include

int count=0;

//記錄當前訪問節點個數

int edge[10]

[10];

int queue[10]

;//bfs時的佇列

int head,tail;

//佇列的頭尾

void

dfs(

int*visit,

int i,

int n)

;void

bfs(

int*visit,

int n)

;int

main

(void

)for

(i=0

;i) i=0;

visit[0]

=1;while

(count!=n)

\n")

;while

(visit[i]

&&ii++

;//找到序號最小的且沒有訪問過的節點

if(i!=n)

visit[i]=1

;// 防越界

}for

(i=0

;i) visit[i]=0

;//初始化

count=0;

i=0;

while

(count!=n)

\n")

;while

(visit[i]

&&ii++;}

return0;

}void

dfs(

int*visit,

int i,

int n)

//訪問與否 從第幾個節點開始

// i j之間有連線

j++;}

return;}

void

bfs(

int*visit,

int n)

i++;}

head++;}

while

(head+

1<=tail)

;for

(i=0

;i)printf

("%d "

,queue[i]);

return

;}

注意bfs要用佇列來輔助,這樣就可以把某個節點的下一層節點全給找出來

還有就是dfs的搜尋資料太大的時候會造成堆疊溢位

結果:

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

給定乙個有n個頂點和e條邊的無向圖,請用dfs和bfs分別列出其所有的連通集。假設頂點從0到n 1編號。進行搜尋時,假設我們總是從編號最小的頂點出發,按編號遞增的順序訪問鄰接點。輸入格式 輸入第1行給出2個整數n 0輸出格式 按照 的格式,每行輸出乙個連通集。先輸出dfs的結果,再輸出bfs的結果。...

7 1 列出葉結點(25 分) 資料結構

7 1 列出葉結點 25 分 對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1...

PTA 資料結構與演算法 堆疊

1.棧底元素是不能刪除的元素。1分 tf 2.對順序棧進行進棧 出棧操作不涉及元素的前 後移動問題。1分 tf 3.若用data 1 m 表示順序棧的儲存空間,則對棧的進棧 出棧操作最多只能進行m次。1分 tf 4.通過對堆疊s操作 push s,1 push s,2 pop s push s,3 ...