在圖論演算法中圖的表示主要有有鄰接矩陣和鄰接表兩種表示法,在這篇文章之前,已經發布了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,分別代表該...