資料結構PTA 基礎實驗6 2 2 漢密爾頓迴路

2021-10-08 13:41:51 字數 2239 閱讀 5554

著名的「漢密爾頓(hamilton)迴路問題」是要找乙個能遍歷圖中所有頂點的簡單迴路(即每個頂點只訪問 1 次)。本題就要求你判斷任一給定的迴路是否漢密爾頓迴路。

輸入格式:

首先第一行給出兩個正整數:無向圖中頂點數 n(21​​ v​2 ⋯ vn

其中 n 是迴路中的頂點數,vi是路徑上的頂點編號。

輸出格式:

對每條待檢迴路,如果是漢密爾頓迴路,就在一行中輸出"yes",否則輸出"no"。

輸入樣例:

6 10

6 23 4

1 52 5

3 14 1

1 66 3

1 24 5

67 5 1 4 3 6 2 5

6 5 1 4 3 6 2

9 6 2 1 6 3 4 5 2 6

4 1 2 5 1

7 6 1 3 4 5 2 6

7 6 1 2 5 4 3 1

輸出樣例:

yes

nono

noyes

no

思路

根據hamilton迴路的特點,乙個迴路要是hamilton迴路需要具備以下特點:

它是個迴路,即起始點和終止點需要相等。

它遍歷了圖上所有的點,且各點只訪問一次。

它中間走過的路徑是存在的。

根據以上特點,具體可以這樣操作:

用乙個鄰接矩陣的結構來儲存圖的資訊

對於需要判定的迴路,首先判斷其輸入的點是否為graph->nv+1,如果不是,直接輸出no,如果是則讀取。

用乙個inputarr陣列儲存輸入的點,用visited陣列來標記陣列角標對應編號的頂點是否訪問。在這一步讀入的時候,可以直接去判斷輸入迴路是否滿足條件1,當然也可以放在下面的步驟判斷。

每次都用inputarr陣列相鄰兩個元素判斷,看這兩個元素是否有邊相連,一旦沒有,輸出no。有的話,把inputarr陣列中後乙個元素的visited標記置為1.

完成後檢查visited的標記是否全為1,如果不全為1就說明不滿足條件2,輸出no。

實現

#include

#include

#define maxn 200

#define infinity 100000

typedef

int weighttype;

typedef

int vertex;

typedef

struct gnode *ptrtognode;

typedef ptrtognode mgraph;

struct gnode

;typedef

struct enode *ptrtoenode;

typedef ptrtoenode edge;

struct enode

;mgraph creategraph

(int vertexnum)

void

insertedge

(mgraph graph, edge e)

mgraph buildgraph

(int vertexnum,

int edgenum)

return graph;

}int

isedge

(mgraph graph, vertex v1, vertex v2)

intmain()

;int visited[maxn]=;

scanf

("%d %d"

,&n,

&m);

mgraph graph =

buildgraph

(n, m)

;scanf

("%d"

,&k)

;for

(i=0

; ielse

//for

(j=0

; jnv+

1; j++

)for

(j=0

; jnv; j++)}

if(j == graph->nv)}if

(j == graph->nv)

printf

("yes\n");

}}}return0;

}

pta資料結構

是否二叉搜尋樹 這題只要是了解二叉查詢樹的特點。bool isbst bintree t while right1 return isbst t left isbst t right 線性探測法的查詢函式 主要注意雜湊函式,這裡那個常量是真的坑,卡了半天。position find hashtabl...

資料結構PTA 基礎實驗6 2 1 列出連通集

給定乙個有n個頂點和e條邊的無向圖,請用dfs和bfs分別列出其所有的連通集。假設頂點從0到n 1編號。進行搜尋時,假設我們總是從編號最小的頂點出發,按編號遞增的順序訪問鄰接點。輸入格式 輸入第1行給出2個整數n 0輸出格式 按照 的格式,每行輸出乙個連通集。先輸出dfs的結果,再輸出bfs的結果。...

PTA資料結構單選

最近學習資料結構鍊錶,被每週作業題所困。現做題解,以此共勉。析 不帶頭節點的單向鍊錶,一定具有頭指標,且在這兒以頭指標冠以鍊錶名。頭指標指向第乙個節點的儲存位置。向空鍊錶插入元素,則讓該插入元素的鏈結位址為h 第乙個節點的位置 再使頭指標h指向該元素。析 頭節點 位於首節點之前,為空,則鏈結位址為n...