/*
煙台大學計算機學院
檔名稱: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 訪問許可權為保護型的資料...