第11周專案4

2021-08-10 16:39:44 字數 4457 閱讀 3314

/* 

煙台大學計算機學院

檔名稱:xiangmu.cpp

完成日期:2023年11月12日

問題描述:

假設圖g採用鄰接表儲存,分別設計實現以下要求的演算法,要求用區別於示例中的圖進行多次測試,通過觀察輸出值,掌握相關問題的處理方法。

(1)設計乙個演算法,判斷頂點u到v是否有簡單路徑

(2)設計乙個演算法輸出圖g中從頂點u到v的一條簡單路徑(設計測試圖時,保證圖g中從頂點u到v至少有一條簡單路徑)。

(3)輸出從頂點u到v的所有簡單路徑。

(4)輸出圖g中從頂點u到v的長度為s的所有簡單路徑。

(5)求圖中通過某頂點k的所有簡單迴路(若存在)

(6)求不帶權連通圖g中從頂點u到頂點v的一條最短路徑。

(7)求不帶權連通圖g中,距離頂點v最遠的頂點k

輸入描述:無

輸出描述:各題目結果

用到了演算法庫graph.h

*/

1.

#include #include #include "../graph.h"

int visited[maxv]; //定義存放節點的訪問標誌的全域性陣列

void existpath(algraph *g,int u,int v, bool &has)

p=g->adjlist[u].firstarc;

while (p!=null)

}void haspath(algraph *g,int u,int v)

int main()

, ,,,

,}; //請畫出對應的有向圖

arraytolist(a[0], 5, g);

haspath(g, 1, 0);

haspath(g, 4, 1);

return 0;

}

2.

#include #include #include "../graph.h"

int visited[maxv]; //定義存放節點的訪問標誌的全域性陣列

void findapath(algraph *g,int u,int v,int path,int d)

p=g->adjlist[u].firstarc; //p指向頂點u的第乙個相鄰點

while (p!=null)

}void apath(algraph *g,int u,int v)

int main()

, ,,,

,}; //請畫出對應的有向圖

arraytolist(a[0], 5, g);

apath(g, 1, 0);

apath(g, 4, 1);

return 0;

}

3.

#include #include #include "../graph.h"

int visited[maxv]; //定義存放節點的訪問標誌的全域性陣列

void findpaths(algraph *g,int u,int v,int path,int d)

//d是到當前為止已走過的路徑長度,呼叫時初值為-1

p=g->adjlist[u].firstarc; //p指向u的第一條邊

while(p!=null)

visited[u]=0; //恢復環境

}void disppaths(algraph *g,int u,int v)

int main()

, ,,,

}; //請畫出對應的有向圖

arraytolist(a[0], 5, g);

disppaths(g, 1, 4);

return 0;

}

4.

#include #include #include "../graph.h"

int visited[maxv]; //定義存放節點的訪問標誌的全域性陣列

void somepaths(algraph *g,int u,int v,int s, int path,int d)

//d是到當前為止已走過的路徑長度,呼叫時初值為-1

p=g->adjlist[u].firstarc; //p指向u的第一條邊

while(p!=null)

visited[u]=0; //恢復環境

}void dispsomepaths(algraph *g,int u,int v, int s)

int main()

, ,,,

}; //請畫出對應的有向圖

arraytolist(a[0], 5, g);

dispsomepaths(g, 1, 4, 3);

return 0;

}

5.

#include #include #include "../graph.h"

int visited[maxv]; //全域性變數

void dfspath(algraph *g,int u,int v,int path,int d)

//d是到當前為止已走過的路徑長度,呼叫時初值為-1

if (visited[w]==0) //w未訪問,則遞迴訪問之

dfspath(g,w,v,path,d);

p=p->nextarc; //找u的下乙個鄰接頂點

}visited[u]=0; //恢復環境:使該頂點可重新使用

}void findcyclepath(algraph *g,int k)

//輸出經過頂點k的所有迴路

int main()

, ,,,

}; //請畫出對應的有向圖

arraytolist(a[0], 5, g);

findcyclepath(g, 0);

return 0;

}

6.

#include #include #include "../graph.h"

typedef struct

quere; //非環形佇列型別

void shortpath(algraph *g,int u,int v)

printf("%2d\n",qu[i].data);

break;

}p=g->adjlist[w].firstarc; //找w的第乙個鄰接點

while (p!=null)

p=p->nextarc; //找w的下乙個鄰接點}}

}int main()

, ,,,

,,,,

}; //請畫出對應的有向圖

arraytolist(a[0], 9, g);

shortpath(g,0,7);

return 0;

}

7.

#include #include #include "../graph.h"

int maxdist(algraph *g,int v)

p=p->nextarc; //找下乙個鄰接點}}

return k;

}int main()

, ,,,

,,,,

}; //請畫出對應的有向圖

arraytolist(a[0], 9, g);

printf("離頂點0最遠的頂點:%d",maxdist(g,0));

return 0;

}

執行結果:

學習心得:

學會了路徑的基本演算法。

第4周專案4

煙台大學計算機學院 檔名稱 xm.cpp 完成日期 2017年9月24日 問題描述 一群猴子,編號是1,2,3 m,這群猴子 m個 按照1 m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子為大王。輸入m和n,輸出為大王的猴子是幾號...

第11周專案四

corpyright c 2013,煙台大學計算機學院 all right reseved.完成日期 2014年5月5日 版本號 v1.0 輸入描述 問題描述 第11周專案四 程式輸出 問題分析 演算法設計 include includeusing namespace std class point...

第11周專案一

檔名稱 array.cpp 作 者 李中意 完成日期 2014 年 5 月 6 日 版本號 v1.0 輸入描述 無 include using namespace std class stu 宣告基類 void display 成員函式,輸出基類資料成員 protected 訪問許可權為保護型的資料...