6-2 两顶点之前有路径吗?
生活随笔
收集整理的這篇文章主要介紹了
6-2 两顶点之前有路径吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
6-2 兩頂點之前有路徑嗎? (20 分)
對于給定的無向圖及兩個圖中的頂點,請實現一個函數,分別打印包含這兩個頂點的連通分量中的頂點數,并判斷這兩個頂點之間是否有路徑。
函數接口定義:
int hasPath(struct Graph *g, int v, int w);
其中v和w是頂點
圖定義如下:
題目保證圖至少有一個頂點
函數分別在第一行和第二行打印包含v和w的連通分量中頂點的數量。
如果 v和w之間有路徑,函數返回1, 否則返回0.
提示:
你可以定義多個函數,也可以定義全局變量.
當v和w是同一個頂點時,認為v和w之間是有路徑的。
裁判測試程序樣例:
輸入樣例:
對于此圖及樣例測試程序規定的輸入格式:
8
0 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 3
結尾無空行
Sample Output:
5
2
No
結尾無空行
C(gcc)
int F = 0; int hasPath(struct Graph* g, int v, int w) {int q[1000];int l = 0, r = 0, t;visited[v] = 1;q[r++] = v;while (l < r){t = q[l++]; if (t == w) { F = 1; break; }for (int i = 0; i < g->v; i++){if (g->Adj[t][i] && visited[i] == 0){q[r++] = i; visited[i] = 1;}}}travel(g, v);travel(g, w);return F; } void travel(struct Graph* g, int v)// BFS統計連通分量頂點個數 {for (int i = 0; i < g->v; i++)visited[i] = 0;//清空搜索記錄int q[1000];int l = 0, r = 0, c = 0, t;visited[v] = 1;q[r++] = v;while (l < r){t = q[l++]; c++;for (int i = 0; i < g->v; i++){if (g->Adj[t][i] && visited[i] == 0){q[r++] = i; visited[i] = 1;}}}printf("%d\n", c); }總結
以上是生活随笔為你收集整理的6-2 两顶点之前有路径吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础-面向对象进阶-多态包fin
- 下一篇: 问题 C: 逃离机场