首先声明定义之后会用到的宏
typedef char VertexType;
typedef int EdgeType;
#define INF 65535
#define MAXVEX 100
bool visited[MAXVEX];
邻接矩阵存储结构
typedef struct MGraph
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int vertexs_num, edges_num;
} MGraph;
创建初始化图
void create_mgraph(MGraph *G)
{
cin >> G->vertexs_num >> G->edges_num;
for(int i = 0; i < G->vertexs_num; ++ i)
cin >> G->vexs[i];
for(int i = 0; i < G->edges_num; ++ i)
for(int j = 0; j < G->edges_num; ++ j)
G->arc[i][j] = INF;
for(int i = 0; i < G->edges_num; ++ i)
{
int x, y, v;
cin >> x >> y >> v;
G->arc[x][y] = v;
G->arc[y][x] = v;
}
}
邻接矩阵的无向图的递归的深度优先遍历
void DFS(const MGraph *G, int i)
{
visited[i] = true;
cout << G->vexs[i] << " ";
for(int j = 0; j < G->vertexs_num; ++ j)
if(G->arc[i][j] == 1 && !visited[j])
DFS(G, j);
}
void DFS_Traverse(const MGraph *G)
{
for(int i = 0; i < G->vertexs_num; ++ i)
visited[i] = false;
for(int i = 0; i < G->vertexs_num; ++ i)
if(!visited[i])
DFS(G, i);
}
邻接矩阵的无向图的广度优先遍历
void BFSTraverse(MGraph *G)
{
queue<int> Q;
for(int i = 0; i < G->vertexs_num; ++ i)
visited[i] = false;
for(int i = 0; i < G->vertexs_num; ++ i) {
if(!visited[i]) {
visited[i] = true;
cout << G->vexs[i] << " ";
Q.push(i);
while(!Q.empty()) {
int k = Q.front();
Q.pop();
for(int j = 0; j < G->vertexs_num; ++ j) {
if(G->arc[k][j] == 1 && !visited[j])
{
visited[j] = true;
cout << G->vexs[j] << " ";
Q.push(j);
}
}
}
}
}
}
测试
int main()
{
/*
5 6
A B C D E
0 1 1
1 2 1
0 4 1
2 4 1
0 3 1
2 3 1
*/
MGraph *G = new MGraph;
create_mgraph(G);
DFS_Traverse(G);
cout << endl;
BFSTraverse(G);
cout << endl;
system("pause");
return 0;
}