如有不對,不吝賜教
直接進入正題:
給定乙個有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 ...