DAG图的存储与DFS遍历

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 const int maxv = 1000;
 5 const int maxe = 5000;
 6 const int maxn = 1000;
 7 /*
 8 * 邻接矩阵
 9 *
10 */
11 struct adjMetrix {
12     int G[maxn+10][maxn+10];
13     int visit[maxn]; //标记点访问与否
14     int n;
15     void addedge(int u, int v) {
16         G[u][v] = 1;
17         return ;
18     }
19     void read() {
20         memset(G, 0, sizeof(G));
21         memset(visit, 0, sizeof(visit));
22         int u, v, w;
23         scanf("%d", &n);
24         for (int i=0; i<n; i++) {
25             scanf("%d %d", &u, &v);
26             addedge(u, v);
27         }
28         return ;
29     }
30     void dfs(int i) {
31         for (int j=0; j<=n; j++) {
32             if (G[i][j]!=0 && visit[j]==0) {
33                 printf("%d %d\n", i, j);
34                 visit[j] = 1;
35                 dfs(j);
36             }
37         }
38     }
39 };
40
41 /*
42 * 邻接链表
43 *
44 */
45 struct Edge {
46     int to, w, next;
47 };
48
49 struct adjTable {
50     int node[maxv];
51     int visit[maxe];
52     int cnt;
53     struct Edge e[maxe];
54     void init() {
55         memset(node, -1, sizeof(node));
56         memset(visit, 0, sizeof(visit));
57         cnt = 0;
58     }
59     void addedge(int u,int v) {
60         e[cnt].to = v;
61         e[cnt].next = node[u];
62         node[u] = cnt++;
63     }
64     void read() {
65         int n, u, v, w;
66         scanf("%d", &n);
67         for (int i=1; i<=n; i++) {
68             scanf("%d %d", &u, &v);
69             addedge(u, v);
70         }
71         return ;
72     }
73     void dfs(int p) {
74         int i;
75         for (i=node[p]; i!=-1; i=e[i].next) {
76             if (visit[ e[i].to ] == 0) { //如果下一条边的指向点未被访问过
77                 printf("%d %d\n", p, e[i].to);
78                 visit[ p ] = 1; //标记当前点已被访问
79                 dfs( e[i].to );
80             }
81         }
82     }
83 };
时间: 2024-11-13 08:35:55

DAG图的存储与DFS遍历的相关文章

(转)数据结构之图(存储结构、遍历)

一.图的存储结构 1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图.一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图. 从上面可以看出,无向图的边数组是一个对称矩阵.所谓对称矩阵就是n阶矩阵的元满足aij = aji.即从矩阵的左上角到右下角的主对角线为轴,右上角的元和左下角相对应的元全都是相等的. 从这个矩阵中,很容易知道图中的信息. (1)要判断任意两顶点是否有

图的存储结构及遍历

一.图的存储结构 1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图.一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图. 从上面可以看出,无向图的边数组是一个对称矩阵.所谓对称矩阵就是n阶矩阵的元满足aij = aji.即从矩阵的左上角到右下角的主对角线为轴,右上角的元和左下角相对应的元全都是相等的. 从这个矩阵中,很容易知道图中的信息. (1)要判断任意两顶点是否有

【algo&amp;ds】5.图及其存储结构、遍历

1.什么是图 图表示"多对多"的关系 包含 一组顶点:通常用 V(Vertex)表示顶点集合 一组边:通常用 E(Edge)表示边的集合 边是顶点对:(v,w)∈ E,其中 v,w ∈ V ,v-w 有向边 <v,w> 表示从 v 指向 w 的边(单行线) v→w 不考虑重边和自回路 常见术语 无向图:图中所有的边无所谓方向 有向图:图中的边可能是双向,也可能是单向的,方向是很重要的 权值:给图中每条边赋予的值,可能有各种各样的现实意义 网络:带权值的图 邻接点:有边直接相

邻接表存储图,DFS遍历图的java代码实现

import java.util.*; public class Main{ static int MAX_VERTEXNUM = 100; static int [] visited = new int[MAX_VERTEXNUM]; public static void main(String [] args){ Graph G = new Graph(); creatGraph(G); output(G); for(int i=0;i<G.vertex_num;i++) visited[i

图的邻接表存储c实现(DFS遍历)

先简要列出实现过程中所需要的数据结构. 如下图 对于这个图而言,它的邻接表可以这样表示,当然表现形式可以多样,这只是我随便画的一种表示方法. 顶点表                                          边表 我们把第一个表即上面标着fixedvex的这个表称作顶点表,后边的称为边表. 上图所示,边表的结构应该这样写: //定义一个边表节点的结构 typedef struct node{ int adjvex; //int Mark; //用于标记是否被访问过 nod

数据结构之图(术语、存储结构、遍历)

1.相关术语 顶点(Vertex).弧(Arc).弧头(初始点).弧尾(终结点).边(Edge).有向图(Directed graph).无向图(Undigraph).完全图(Completed grapg).有向完全图.稀疏图(Sparse graph).稠密图(Dense graph).权(weigh).网(network).无向网.有向网.子图(Subgraph).邻接点(Adjacent).度(Degree).入度(Indegree).出度(Outdegree).路径(path).简单路

数据结构之图(存储结构、遍历)

新学期开始了,开始专心于技术上了,上学期的寒假总是那么短暂,飘飘乎就这样逝去,今天补补上学期还没学完的数据结构---图,希望能和大家一起探讨,共同进步~ 定义: 图是由顶点集合及顶点间的关系集合组成的一种数据结构. 图的存储结构: 1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图.一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图. 从上面可以看出,无向图的边数组是一

数据结构算法之图的存储与遍历(Java)

一:图的分类 1:无向图 即两个顶点之间没有明确的指向关系,只有一条边相连,例如,A顶点和B顶点之间可以表示为 <A, B> 也可以表示为<B, A>,如下所示 2:有向图 顶点之间是有方向性的,例如A和B顶点之间,A指向了B,B也指向了A,两者是不同的,如果给边赋予权重,那么这种异同便更加显著了 =============================================================================================

图数据结构(期限、存储结构、遍历)

1.相关条款 顶点(Vertex).弧形(Arc).圆弧头(初始点).圆弧终点(端点).边缘(Edge).向图(Directed graph).无向图(Undigraph).完全图(Completed grapg).导演完全图.稀疏图(Sparse graph).密集图(Dense graph).权(weigh).网(network).无向网.有向网.子图(Subgraph).邻接点(Adjacent).度(Degree).入度(Indegree).出度(Outdegree).路径(path).