博客
关于我
大二数据结构(图的深度遍历的 非递归算法)
阅读量:358 次
发布时间:2019-03-04

本文共 1869 字,大约阅读时间需要 6 分钟。

#include <stdio.h>#include <stdlib.h>#define maxSize 20 typedef struct ArcNode{       int adjvex;    struct ArcNode *nextarc;}ArcNode; typedef struct{       char data;    struct ArcNode *firstarc;}VNode; typedef struct{       VNode adjlist[maxSize];    int n, e;}AGraph; void createGraph(AGraph *G){       int i, tail, head, edges, vertex;    ArcNode *tmp, *p;    printf("请输入图的顶点数:");    scanf("%d", &vertex);    printf("请输入图的边数:");    scanf("%d", &edges);        G->n = vertex;    G->e = edges;        for (i = 1; i <= edges; ++i) {           printf("请输入第%d条边的弧尾与弧头\n", i);        printf("弧尾: ");        scanf("%d", &tail);        printf("弧头: ");        scanf("%d", &head);        p = (ArcNode *)malloc(sizeof(ArcNode));        p->adjvex = head;        p->nextarc = NULL;        //建立邻接表        tmp = G->adjlist[tail].firstarc;        if(tmp == NULL)            G->adjlist[tail].firstarc = p;        else{               while (tmp->nextarc != NULL)                tmp = tmp->nextarc;            tmp->nextarc = p;        }    }    printf("图建立完毕\n");} void DFSNonRecursion(AGraph *G, int v){       printf("图DFS开始\n");    int stack[maxSize];    int top = -1;    int visit[maxSize];    int i, j, k;    ArcNode *p;        for (i = 0; i < maxSize; ++i)        visit[i] = 0;        printf("%d  ", v);    visit[v] = 1;    stack[++top] = v;    while (top != -1) {           j = stack[top];        p = G->adjlist[j].firstarc;        while (p != NULL) {               while (p != NULL && visit[p->adjvex] == 1)                p = p->nextarc;            if(p == NULL)                break;            k = p->adjvex;            stack[++top] = k;            visit[k] = 1;            printf("%d  ", k);            p = G->adjlist[k].firstarc;        }        --top;    }    printf("\n图DFS完毕\n");} int main(){       AGraph G;    createGraph(&G);    DFSNonRecursion(&G, 0);    return 0;}

转载地址:http://mtfg.baihongyu.com/

你可能感兴趣的文章
linux杂谈之特殊字符的打印和在各种软件如何打出
查看>>
vim杂谈(三)之配色方案
查看>>
vim杂谈(五)之vim不加载~/.vimrc
查看>>
Linux杂谈之终端快捷键
查看>>
vimscript学习笔记(二)预备知识
查看>>
vimscript学习笔记(三)信息打印
查看>>
awk杂谈之数组习题
查看>>
SSM项目中遇到Could not autowire. No beans of ‘XXX‘ type found.错误
查看>>
Linux网络属性配置详解
查看>>
Python(三十)类的理解
查看>>
Extjs布局详解
查看>>
Android数据库
查看>>
C语言之指针再涉(二)
查看>>
Linux基础命令(十四)软件安装的后续
查看>>
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
查看>>
keil左侧文件调整方法
查看>>
本地分支关联远程分支
查看>>
STM8 GPIO模式
查看>>
python多态和封装
查看>>
STM32boot启动
查看>>