代码如下:

/* 图的邻接矩阵表示法 */#define MaxVertexNum 100    /* 最大顶点数设为100 */
#define INFINITY 65535        /* ∞设为双字节无符号整数的最大值65535*/
typedef int Vertex;         /* 用顶点下标表示顶点,为整型 */
typedef int WeightType;        /* 边的权值设为整型 */
typedef char DataType;        /* 顶点存储的数据类型设为字符型 *//* 边的定义 */
typedef struct ENode *PtrToENode;
struct ENode{Vertex V1, V2;      /* 有向边<V1, V2> */WeightType Weight;  /* 权重 */
};
typedef PtrToENode Edge;/* 图结点的定义 */
typedef struct GNode *PtrToGNode;
struct GNode{int Nv;  /* 顶点数 */int Ne;  /* 边数   */WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */DataType Data[MaxVertexNum];      /* 存顶点的数据 *//* 注意:很多情况下,顶点无数据,此时Data[]可以不用出现 */
};
typedef PtrToGNode MGraph; /* 以邻接矩阵存储的图类型 */MGraph CreateGraph( int VertexNum )
{ /* 初始化一个有VertexNum个顶点但没有边的图 */Vertex V, W;MGraph Graph;Graph = (MGraph)malloc(sizeof(struct GNode)); /* 建立图 */Graph->Nv = VertexNum;Graph->Ne = 0;/* 初始化邻接矩阵 *//* 注意:这里默认顶点编号从0开始,到(Graph->Nv - 1) */for (V=0; V<Graph->Nv; V++)for (W=0; W<Graph->Nv; W++)  Graph->G[V][W] = INFINITY;return Graph;
}void InsertEdge( MGraph Graph, Edge E )
{/* 插入边 <V1, V2> */Graph->G[E->V1][E->V2] = E->Weight;    /* 若是无向图,还要插入边<V2, V1> */Graph->G[E->V2][E->V1] = E->Weight;
}MGraph BuildGraph()
{MGraph Graph;Edge E;Vertex V;int Nv, i;scanf("%d", &Nv);   /* 读入顶点个数 */Graph = CreateGraph(Nv); /* 初始化有Nv个顶点但没有边的图 */ scanf("%d", &(Graph->Ne));   /* 读入边数 */if ( Graph->Ne != 0 ) { /* 如果有边 */ E = (Edge)malloc(sizeof(struct ENode)); /* 建立边结点 */ /* 读入边,格式为"起点 终点 权重",插入邻接矩阵 */for (i=0; i<Graph->Ne; i++) {scanf("%d %d %d", &E->V1, &E->V2, &E->Weight); /* 注意:如果权重不是整型,Weight的读入格式要改 */InsertEdge( Graph, E );}} /* 如果顶点有数据的话,读入数据 */for (V=0; V<Graph->Nv; V++) scanf(" %c", &(Graph->Data[V]));return Graph;
}

图的建立-邻接矩阵表示(C语言)相关推荐

  1. 无向有权图的建立(邻接链表法) 广度优先搜索 深度优先搜素

    /**图的邻接表存储方式*/#include<iostream> #include<cstdio> #include<string.h> #include<s ...

  2. 图的建立-邻接表表示(C语言)

    代码如下: /* 图的邻接表表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */ typedef int Vertex; /* 用顶点下标表示顶点,为整型 * ...

  3. 【图论】图的建立——邻接矩阵法

    G[i][j]:表示顶点i->j的边权 若边权为0.-1.或一个很大的数,表示边不存在 适用于顶点数较小的题(一般不超过100) 1.图的定义 顶点数.边数.权 2.初始化一个有顶点但没有边的图 ...

  4. java 图的邻接矩阵表示,深度优先遍历,广度优先遍历

    转载:http://blog.csdn.net/yxmmao/article/details/51586540 1 . 创建图的邻接矩阵数据结构 public class MGraph {/*图的邻接 ...

  5. 图:邻接矩阵表示法创建无向图并深度优先搜索遍历

    无向图样式: 邻接矩阵法类似于用数组储存,一个一维数组储存顶点信息,还有一个二维数组储存邻接矩阵 用邻接矩阵进行无向图的创建过程: 一,输入总顶点数和边数(几个点,几条边) eg:如图所示即为8点,9 ...

  6. java布尔矩阵程序_Java编程实现邻接矩阵表示稠密图代码示例

    我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那 ...

  7. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  8. MatLab图的最小路径(邻接矩阵表示)

    使用邻接矩阵表示有向图或无向图,对其进行最小路径的查询以及权值计算 采用递归算法,首先定义输入参数有 邻接矩阵.起始点.终止点.已走完的路长.当前已知最小路长: function [result, p ...

  9. 图的建立(邻接矩阵)与其深度优先和广度优先遍历

    建立一个有向图或无向图,输入其顶点数,边数,并给出相应边的权值,输出该图对应的邻接矩阵,并用递归实现其深度优先遍历和用队列实现其广度优先遍历后的结果. 图的遍历 从给定图中任意指定的顶点(称为初始点) ...

最新文章

  1. 小白请上车 | Python抓取花瓣网高清美图
  2. 好用的 Markdown 编辑器 Typora【Window 、Linux 下的安装教程】
  3. 装饰者模式源码解析(spring-session mybatis jdk servlet)
  4. python程序员脱单攻略_作为一只程序员,如何脱单?
  5. 最新IP数据库 存储优化 查询性能优化 每秒解析上千万
  6. 话筒好坏测试软件,如何简单地判断麦克风的质量好坏?
  7. 随机邮箱_msgsafe - 一个处于半死不活状态的加密邮箱
  8. Linux物理内存初始化
  9. 英语(10)---脱口而出的英语
  10. go bson转换成json_你会不会用Go语言实现redis的延时消息队列
  11. typeof---JavaScript
  12. 010Editor逆向及注册机实现
  13. Spring源码解析:Spring Aware 原理解析
  14. 如何查看Maven项目中的jar包依赖树情况?
  15. 游戏文件服务器,游戏服务器文件
  16. 程序员苏享茂:怎样才能遇到对的人?
  17. idea编写html程序如何让别人应用,IntelliJ IDEA使应用程序交互
  18. Cadstar格式导入功能
  19. discord怎么创建账号_如何邀请人们加入Discord服务器(以及创建邀请链接)
  20. 关于vscode Live Server插件无法正常打开浏览器

热门文章

  1. python求非线性优化问题_用python优化非线性函数
  2. C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。
  3. C和指针之字符串编程练习3
  4. Android之通过adb shell getprop、netstat命令看dns、ip
  5. Java - 强引用、弱引用、软引用、虚引用
  6. Qt 第一步 HelloWorld 的第一个程序
  7. python每行输出5个数_python打印杨辉三角及输出第m行第k个数
  8. 如果从椭圆的一个焦点发出光线,再经过椭圆的反射,会发生什么?
  9. 日本的电视节目到底能有多特别?
  10. 从时速100公里行驶的车上向后发射时速100公里的棒球,会发生什么?