描述
乙個連通圖採用鄰接表作為儲存結構。設計乙個演算法,判斷無向圖中任意給定的兩點是否存在一條長度為k的簡單路徑。
輸入多組資料,每組m+3資料行。第一行有兩個數字n,m和k,代表有n個頂點,m條邊和長度k。第二行有n個字元,代表n個頂點的編號。第三行到第m+2行每行有兩個字元h和p,代表邊依附的兩個頂點。每條邊的長度為1。第m+3行有兩個字元d和f,代表需要判斷的兩個字元。
輸出每組資料輸出一行。若存在路徑輸出「yes」,反之輸出「no」。
輸入樣例 1
3 2 2abcab
bcac
4 2 5
bcsw
bssw
bw0 0 0
輸出樣例 1
yesno
#include#include#include
using
namespace
std;
#define maxsize 100
using
namespace
std;
typedef
struct
arcnode
arcnode;
typedef
struct
vnode;
typedef
struct
agraph; //
圖的鄰接表型別
intvisit[maxsize];
int locate(agraph *ag, charc)}
int nodenum = 0
;bool dfs(agraph *g, int v,int w,int
k) visit[p->adjvex] = 0
; nodenum--;
p = p->nextarc;}}
return
false;}
//建立無向圖的鄰接表
void createagraph2(agraph *&ag, int t, int
p)
string
cc;
for (k = 0; k < ag->e; ++k)
}agraph *ag;
intmain()
return0;
}
簡單的鄰接表
鄰接表的使用就類似於鍊錶。鄰接表是用來儲存某個節點所連的所有路徑,以及這條路徑的長度,下乙個節點。所以從乙個節點出發,通過鄰接表我們便可以達到對整個圖的遍歷,接下來讓我們看看鄰接表建立以及遍歷的 還不會用製圖工具,我直接用資料來表示吧qaq 我們輸入一組資料 5 4 節點 路的數量 1 2 3 起點...
點分治 統計長度為K的路徑條數
套用第一種點分治模板 先加後減法。計算過程略微不同,得到deep陣列後,計算和為k的路徑對數 1.剔除d i d i k的情況 2.遍歷一遍後,每種情況計算了兩次,最後需要除2 include include include include include include include defin...
基於鄰接表的拓撲排序實現
由於 比較簡單,就直接貼出來了 1 include 2 include 3 include 4 include 5 using namespace std 67 8enum graphtype9 1516 結點顏色代表遍歷情況 17enum colortype18 2324 template25 c...