博客
关于我
大二数据结构(图的深度遍历的 非递归算法)
阅读量:359 次
发布时间: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/

你可能感兴趣的文章
命令模式【Command Pattern】
查看>>
OSI 7 层网络模型
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
Java 中哪些对象可以获取类对象
查看>>
linux 的 cp 命令如何复制不提示覆盖
查看>>
linux 的 sleep 命令
查看>>
js 的 let var const 区别
查看>>
11.2.6 时间值的小数秒
查看>>
11.2.7 日期和时间类型之间的转换
查看>>
redis 内存溢出_从数据存储的角度告诉你Redis为什么这么快!
查看>>
实例分析Facebook激励视频广告接入
查看>>
实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
查看>>
解决mybatis嵌套查询使用PageHelper分页不准确
查看>>
Redis源码分析(七)--- zipmap压缩图
查看>>
大规模集群自动化部署工具--Chef的安装部署
查看>>
自定义Hive Sql Job分析工具
查看>>
【MySQL】(九)触发器
查看>>
关于Altium Designer 09导出BOM表不能正确分类问题
查看>>
Oracle 11G环境配置
查看>>
【Python】(十二)IO 文件处理
查看>>