图的遍历
来源:互联网 发布:剑灵蒂法捏脸数据 编辑:程序博客网 时间:2024/06/10 15:38
- /* 图的邻接矩阵表示法 */
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxVertexNum 100#define INFINITY 65535struct ENode{int v1,v2;/*有向边 <v1,v2>*/int weight;/*权重*/};typedef struct ENode *PtrToENode;struct GNode{int Nv;/*图中顶点个数*/int Ne;/*图中边的条数*/int G[MaxVertexNum][MaxVertexNum];/*邻接矩阵*/char Data[MaxVertexNum];/* 存顶点的数据 */ /* 注意:很多情况下,顶点无数据,此时Data[]可以不用出现 */};typedef struct GNode *PtrToGNode;PtrToGNode CreateGraph(int VertexNum)/*初始化一个有VertexNum个顶点,但没有边的图*/{int V,W;PtrToGNode Graph = (PtrToGNode)malloc(sizeof(struct GNode));Graph->Nv = VertexNum;Graph->Ne = 0;for(V = 0; V < Graph->Nv; V++)/*遍历行*/{for(W = 0; W < Graph->Nv; W++)/*遍历列*/{Graph->G[V][W] = INFINITY;}}return Graph;}void Insert(PtrToGNode Graph, PtrToENode E){Graph->G[E->v1][E->v2] = E->weight; /* 插入边 <V1, V2> */Graph->G[E->v2][E->v1] = E->weight;/* 若是无向图,还要插入边<V2, V1> */}PtrToGNode Build(){int V,Nv;scanf("%d",&Nv);PtrToGNode Graph = CreateGraph(Nv);scanf("%d",&Graph->Ne);if(Graph->Ne != 0){PtrToENode E = (PtrToENode)malloc(sizeof(struct ENode));for(int i = 0; i < Graph->Ne; i++)/*把每条边的信息插入到图中去*/{scanf("%d %d %d",&E->v1,&E->v2,&E->weight);Insert(Graph,E);}} for(int i = 0 ; i < Graph->Nv; i++) { scanf(" %c",&Graph->Data[i]); } return Graph;}
- /* 图的邻接表表示法 */
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxVertexNum 100#define INFINITY 65535/*边的定义*/ struct ENode{int v1,v2;int weight;};typedef struct ENode *PtrToENode;/* 邻接点的定义 */struct AdjVNode{int Adjv;int weight;struct AdjVNode *next;};typedef struct AdjVNode *PtrToAdjVNode;/*每个顶点都是一个表头结点*/typedef struct FirstVNode{PtrToAdjVNode FirstEdge;char Data;/*Data 可以是其他类型*/}Adjlist[MaxVertexNum];/*图结点的定义*/struct GNode{int Nv;int Ne;Adjlist G;};typedef struct GNode *PtrToGNode;PtrToGNode CreateGraph(int VertexNum){PtrToGNode Graph = (PtrToGNode)malloc(sizeof(struct GNode));Graph->Nv = VertexNum;Graph->Ne = 0;for(int i = 0; i < Graph->Nv; i++){Graph->G[i].FirstEdge = NULL;}return Graph;}void Insert(PtrToGNode Graph, PtrToENode E){PtrToAdjVNode NewNode;/*为v2建立新的邻结点*/NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));NewNode->Adjv = E->v2;NewNode->weight = E->weight;/*将v2插入v1的表头,类似于链表的插入操作*/NewNode->next = Graph->G[E->v1].FirstEdge;Graph->G[E->v1].FirstEdge = NewNode;/*为v2建立新的邻结点*/NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));NewNode->Adjv = E->v1;NewNode->weight = E->weight;/*将v2插入v1的表头*/NewNode->next = Graph->G[E->v2].FirstEdge;Graph->G[E->v2].FirstEdge = NewNode;}PtrToGNode Build(){int V,W;int Nv;scanf("%d",&Nv);PtrToGNode Graph = CreateGraph(Nv);scanf("%d",&Graph->Ne);if(Graph->Ne != 0){PtrToENode E = (PtrToENode)malloc(sizeof(struct ENode));for(int i = 0 ; i < Graph->Ne; i++){scanf("%d %d %d",&E->v1,&E->v2,&E->weight);}Insert(Graph,E);}return Graph;}
0 0
- 图:图的遍历(深度优先遍历、广度优先遍历)
- java图的遍历方式(深度遍历、广度遍历)
- java图的遍历方式(深度遍历、广度遍历)
- 图的遍历(深度遍历和广度遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的 深度遍历 广度遍历
- 图的深度遍历和广度遍历
- 图的遍历(深度优先遍历)
- 图的遍历:深度优先遍历
- 图的遍历:宽度优先遍历
- 图的广度遍历和深度遍历
- 图的深度遍历和广度遍历
- 图的遍历-深度优先遍历
- 图的遍历-广度优先遍历
- 图的dfs遍历和bfs遍历
- 图的深度遍历和广度遍历
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 移动端海洋实时仿真技术研究与实现
- JVM
- 10分钟精通SharePoint - SharePoint定位
- Struts2-action在struts.xml中的配置
- SQL语言的基本操作学习(二)
- 图的遍历
- Ardupilot编译流程分析
- cocosjs 绑定c++中遇到的坑
- 数据挖掘-概念
- 不要全聚德!老北京人告诉你,该买什么“北京特产”带回家!
- Android学习笔记(一)Activiy学习——生命周期
- 苹果 iMessage 推广 已经成为21世纪的潮流 联系Q1623461967
- Linux&C语言文件学习笔记(四):文件I/O与系统API续
- 2017.1.21【初中部 GDKOI】模拟赛B组 树的连通性 题解