我是靠谱客的博主 娇气冬瓜,这篇文章主要介绍以邻接矩阵表示的图的非递归深度优先遍历,现在分享给大家,希望可以做个参考。

#define MaxVertexNum 30
//-------------------------------------------邻接表
typedef struct ArcNode {//边表结点
int adjvex;//该弧所指向顶点的位置(数组的下标)
struct ArcNode *next;
} ArcNode;
typedef struct VNode {//顶点结点
char data;
ArcNode *first;
} VNode, AdjList[MaxVertexNum];//vertex 顶点
typedef struct {
AdjList vertices;//邻接表,vertices是vertex复数
int vexnum, arcnum;// 顶点数、弧数 arc弧
} ALGraph;
//邻接矩阵----------------------------------------------------
typedef struct {
char Vex[MaxVertexNum];//顶点表
int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵
int vexnum, arcnum;//图的当前顶点数和弧数
} MGraph;
void DFS_NOT_REC(MGraph G, int v) {
int w;//顶点
int top = -1;
int stack[30];
int visited[30];
for (int i = 0; i < G.vexnum; i++) {
visited[i] = 0;
}
stack[++top] = v;
visited[v] = 1;
int k;
while (top != -1) {
k = stack[top--];//当一个节点的所有临接点都已经入栈时,栈顶元素出栈并访问,然后这层访问完毕,下层入栈
printf("%d", k);
for (int i = 0; i < G.vexnum; i++) {
w = i;
if (G.Edge[k][i] != 0 && !visited[w]) {
stack[++top] = w;
visited[w] = 1;
}
}
}
}
int main() {
MGraph G;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
G.Edge[i][j] = 0;
}
G.Edge[0][1] = G.Edge[0][3] = G.Edge[1][0] = G.Edge[1][2] = 1;
G.Edge[1][4] = G.Edge[2][1] = G.Edge[2][3] = G.Edge[2][4] = 1;
G.Edge[3][1] = G.Edge[3][2] = G.Edge[4][1] = G.Edge[4][2] = 1;
G.vexnum = 5;
DFS_NOT_REC(G, 0);
}

最后

以上就是娇气冬瓜最近收集整理的关于以邻接矩阵表示的图的非递归深度优先遍历的全部内容,更多相关以邻接矩阵表示内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部