概述
#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);
}
最后
以上就是娇气冬瓜为你收集整理的以邻接矩阵表示的图的非递归深度优先遍历的全部内容,希望文章能够帮你解决以邻接矩阵表示的图的非递归深度优先遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复