廣度優先搜尋鄰接矩陣表示 (C語言)

2021-10-22 19:04:00 字數 2632 閱讀 1142

在圖論演算法中圖的表示主要有有鄰接矩陣鄰接表兩種表示法,在這篇文章之前,已經發布了dijkstra演算法的鄰接表表示法

dijkstra演算法的鄰接表表示

兩種表示法的演算法思路是一樣的,只是表示的方式不同而帶來了**表示上的細微區別。個人認為鄰接矩陣的表示法更為簡潔,有鄰接表有些繁瑣。

由於思路相似,所以這裡只記錄**上的區別;

首先在資料的輸入上,以矩陣來儲存圖上各點的連通性

int map[9][9]=;

for(i=0;i<9;i++)

getchar();

}

由於我的測試資料是以非數字符號結束輸入,所以不要忘記用getchar()來吞掉非數字符;

同樣建立乙個佇列來控制各點的入隊出隊。

struct node;

pnode out(pnode head) //點出隊

else

}pnode add(pnode head,int a) //點入隊

else

return head;

}

最後就是遍歷各點,完成入隊出隊的核心部分

以乙個結構陣列來儲存各點的資訊:

struct dis;

struct dis dist[9];

for(i=0;i<9;i++)

dist[i].dis=dist[i].key=0;

先初始化第乙個點的資料:

dist[0].key=1; //點是否被訪問

dist[0].dis=0;//該點到原點距離

int x =0;//用變數x來儲存當前遍歷的點到原點距離

遍歷各點

do

} showlink(head);

head=out(head); //之前遍歷的點出隊,佇列頭為下乙個

if(head!=null)

x=dist[head->num].dis+1; //即下乙個點到原點的距離為與他相連的點的+1

}while(head!=null);

完整**:

#include#include#includeint map[9][9]=;

void show();

struct node;

typedef struct node* pnode;

pnode add(pnode,int);

pnode out(pnode);

struct node;

struct dis;

void showlink(pnode);

int main()

getchar();

} show();

struct dis dist[9];

for(i=0;i<9;i++)

int x=1;

pnode head=null;

head=add(head,0);

dist[0].key=1;

dist[0].dis=0;

//printf("%d",head->num);

do

} head=out(head);

if(head!=null)

x=dist[head->num].dis+1;

}while(head!=null);

for(i=1;i<9;i++) }

void show()

puts(""); }}

pnode out(pnode head)

else

}pnode add(pnode head,int a)

else

return head;

}

測試資料:

2 5 3 4 +

1 5 +

1 6 7 +

1 7 8 +

1 2 +

3 7 +

3 4 6 9 +

4 +7 +

所生成的鄰接矩陣

0 1 1 1 1 0 0 0 0

1 0 0 0 1 0 0 0 0

1 0 0 0 0 1 1 0 0

1 0 0 0 0 0 1 1 0

1 1 0 0 0 0 0 0 0

0 0 1 0 0 0 1 0 0

0 0 1 1 0 1 0 0 1

0 0 0 1 0 0 0 0 0

0 0 0 0 0 0 1 0 0

最終輸出結果:

點:2    距離:1

點:3 距離:1

點:4 距離:1

點:5 距離:1

點:6 距離:2

點:7 距離:2

點:8 距離:2

點:9 距離:3

原始的圖的好像被我弄不見了,描述可能沒有那麼直觀。

更直觀的可以看dijkstra演算法,雖然演算法不一樣,但這兩個很相似,大體思路一樣

**預設是9個點的圖,如要測試其他資料,請更改。

廣度優先搜尋 鄰接矩陣

需要了解的是,圖的廣度搜尋遍歷類似於二叉樹的層次遍歷,用到了隊的操作 如下 include include define ok 1 define error 0 define true 1 define false 0 define maxvex 100typedef int datatype 設定...

鄰接矩陣深度與廣度優先遍歷演算法(c 實現)

鄰接矩陣深度與廣度優先遍歷演算法 c 實現 標頭檔案 adjmwgraph.h ifndef adjmwgraph h define adjmwgraph h class adjmwgraph int numofvertices int numofedges vert getvalue const ...

拓撲排序 鄰接矩陣表示

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 給定乙個有向圖,判斷該有向圖是否存在乙個合法的拓撲序列。input 輸入包含多組,每組格式如下。第一行包含兩個整數n,m,分別代表該...