基於鄰接表的長度為k的簡單路徑的求解

2022-06-28 07:51:15 字數 1232 閱讀 7793

描述

乙個連通圖採用鄰接表作為儲存結構。設計乙個演算法,判斷無向圖中任意給定的兩點是否存在一條長度為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 2

abcab

bcac

4 2 5

bcsw

bssw

bw0 0 0

輸出樣例 1

yes

no

#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...