使用邻接矩阵存储,用栈实现图的深度优先遍历
代码如下
#include<iostream>
using namespace std;
typedef int vertexType;
typedef int edgeType;
# define maxnum 100
typedef struct {
vertexType vex[maxnum];
edgeType edge[maxnum][maxnum];
int vexnum, edgenum;
} MGraph;
int first(MGraph g, int i) {
for(int j = g.vexnum; j > 0; j--) {
if(g.edge[i][j]) return j;
}
return 0;
}
int next(MGraph g, int i, int k) {
for(int j = k - 1; j > 0; j--) {
if(g.edge[i][j]) return j;
}
return 0;
}
void DFS(MGraph g, int a, int visited[]);
void DFS_traverse(MGraph g) {
int visited[maxnum];
for(int i = 0; i <= g.vexnum; i ++)
visited[i] = 0;
for(int i = 1; i <= g.vexnum; i ++) {
if(!visited[i])
DFS(g, i, visited);
}
}
void DFS(MGraph g, int a, int visited[]) {
int stack[maxnum];
int top = 0;
stack[top ++] = a;
int i, j;
while (top > 0)
{
i = stack[--top];
if(!visited[i]) {
cout << i << " ";
visited[i] = 1;
}
for(j = first(g, i); j != 0; j = next(g, i, j)) {
stack[top ++] = j;
}
}
}
int main()
{
MGraph g;
g.vexnum = 8;
g.edgenum = 8;
for(int i = 1; i <= g.vexnum; i++){
for(int j = 1; j <= g.vexnum; j++){
g.edge[i][j] = 0;
}
}
g.edge[1][2] = 1;
g.edge[1][3] = 1;
g.edge[2][4] = 1;
g.edge[3][4] = 1;
g.edge[4][5] = 1;
g.edge[4][6] = 1;
g.edge[6][8] = 1;
g.edge[2][7] = 1;
DFS_traverse(g);
return 0;
}