邻接矩阵和邻接表模板(来自慕课网浙大数据结构)

08-图7 公路村村通 (30分) (2020浙大Mooc数据结构配套题) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通需要的最低成本。如果输入数据不足以保... 阅读详情
  1. /* 图的邻接矩阵表示法 */
  2.  
  3. #define MaxVertexNum 100    /* 最大顶点数设为100 */
  4. #define INFINITY 65535        /* ∞设为双字节无符号整数的最大值65535*/
  5. typedef int Vertex;         /* 用顶点下标表示顶点,为整型 */
  6. typedef int WeightType;        /* 边的权值设为整型 */
  7. typedef char DataType;        /* 顶点存储的数据类型设为字符型 */
  8.  
  9. /* 边的定义 */
  10. typedef struct ENode *PtrToENode;
  11. struct ENode{
  12.     Vertex V1, V2;      /* 有向边<V1, V2> */
  13.     WeightType Weight;  /* 权重 */
  14. };
  15. typedef PtrToENode Edge;
  16.         
  17. /* 图结点的定义 */
  18. typedef struct GNode *PtrToGNode;
  19. struct GNode{
  20.     int Nv;  /* 顶点数 */
  21.     int Ne;  /* 边数   */
  22.     WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */
  23.     DataType Data[MaxVertexNum];      /* 存顶点的数据 */
  24.     /* 注意:很多情况下,顶点无数据,此时Data[]可以不用出现 */
  25. };
  26. typedef PtrToGNode MGraph; /* 以邻接矩阵存储的图类型 */
  27.  
  28.  
  29.  
  30. MGraph CreateGraph( int VertexNum )
  31. { /* 初始化一个有VertexNum个顶点但没有边的图 */
  32.     Vertex V, W;
  33.     MGraph Graph;
  34.      
  35.     Graph = (MGraph)malloc(sizeof(struct GNode)); /* 建立图 */
  36.     Graph->Nv = VertexNum;
  37.     Graph->Ne = 0;
  38.     /* 初始化邻接矩阵 */
  39.     /* 注意:这里默认顶点编号从0开始,到(Graph->Nv - 1) */
  40.     for (V=0; V<Graph->Nv; V++)
  41.         for (W=0; W<Graph->Nv; W++)  
  42.             Graph->G[V][W] = INFINITY;
  43.              
  44.     return Graph; 
  45. }
  46.         
  47. void InsertEdge( MGraph Graph, Edge E )
  48. {
  49.      /* 插入边 <V1, V2> */
  50.      Graph->G[E->V1][E->V2] = E->Weight;    
  51.      /* 若是无向图,还要插入边<V2, V1> */
  52.      Graph->G[E->V2][E->V1] = E->Weight;
  53. }
  54.  
  55. MGraph BuildGraph()
  56. {
  57.     MGraph Graph;
  58.     Edge E;
  59.     Vertex V;
  60.     int Nv, i;
  61.      
  62.     scanf("%d", &Nv);   /* 读入顶点个数 */
  63.     Graph = CreateGraph(Nv); /* 初始化有Nv个顶点但没有边的图 */ 
  64.      
  65.     scanf("%d", &(Graph->Ne));   /* 读入边数 */
  66.     if ( Graph->Ne != 0 ) { /* 如果有边 */ 
  67.         E = (Edge)malloc(sizeof(struct ENode)); /* 建立边结点 */ 
  68.         /* 读入边,格式为"起点 终点 权重",插入邻接矩阵 */
  69.         for (i=0; i<Graph->Ne; i++) {
  70.             scanf("%d %d %d", &E->V1, &E->V2, &E->Weight); 
  71.             /* 注意:如果权重不是整型,Weight的读入格式要改 */
  72.             InsertEdge( Graph, E );
  73.         }
  74.     } 
  75.  
  76.     /* 如果顶点有数据的话,读入数据 */
  77.     for (V=0; V<Graph->Nv; V++) 
  78.         scanf(" %c", &(Graph->Data[V]));
  79.  
  80.     return Graph;

  1. }

  1. /* 图的邻接表表示法 */
  2.  
  3. #define MaxVertexNum 100    /* 最大顶点数设为100 */
  4. typedef int Vertex;         /* 用顶点下标表示顶点,为整型 */
  5. typedef int WeightType;        /* 边的权值设为整型 */
  6. typedef char DataType;        /* 顶点存储的数据类型设为字符型 */
  7.  
  8. /* 边的定义 */
  9. typedef struct ENode *PtrToENode;
  10. struct ENode{
  11.     Vertex V1, V2;      /* 有向边<V1, V2> */
  12.     WeightType Weight;  /* 权重 */
  13. };
  14. typedef PtrToENode Edge;
  15.  
  16. /* 邻接点的定义 */
  17. typedef struct AdjVNode *PtrToAdjVNode; 
  18. struct AdjVNode{
  19.     Vertex AdjV;        /* 邻接点下标 */
  20.     WeightType Weight;  /* 边权重 */
  21.     PtrToAdjVNode Next;    /* 指向下一个邻接点的指针 */
  22. };
  23.  
  24. /* 顶点表头结点的定义 */
  25. typedef struct Vnode{
  26.     PtrToAdjVNode FirstEdge;/* 边表头指针 */
  27.     DataType Data;            /* 存顶点的数据 */
  28.     /* 注意:很多情况下,顶点无数据,此时Data可以不用出现 */
  29. } AdjList[MaxVertexNum];    /* AdjList是邻接表类型 */
  30.  
  31. /* 图结点的定义 */
  32. typedef struct GNode *PtrToGNode;
  33. struct GNode{  
  34.     int Nv;     /* 顶点数 */
  35.     int Ne;     /* 边数   */
  36.     AdjList G;  /* 邻接表 */
  37. };
  38. typedef PtrToGNode LGraph; /* 以邻接表方式存储的图类型 */
  39.  
  40.  
  41.  
  42. LGraph CreateGraph( int VertexNum )
  43. { /* 初始化一个有VertexNum个顶点但没有边的图 */
  44.     Vertex V;
  45.     LGraph Graph;
  46.      
  47.     Graph = (LGraph)malloc( sizeof(struct GNode) ); /* 建立图 */
  48.     Graph->Nv = VertexNum;
  49.     Graph->Ne = 0;
  50.     /* 初始化邻接表头指针 */
  51.     /* 注意:这里默认顶点编号从0开始,到(Graph->Nv - 1) */
  52.        for (V=0; V<Graph->Nv; V++)
  53.         Graph->G[V].FirstEdge = NULL;
  54.              
  55.     return Graph; 
  56. }
  57.         
  58. void InsertEdge( LGraph Graph, Edge E )
  59. {
  60.     PtrToAdjVNode NewNode;
  61.      
  62.     /* 插入边 <V1, V2> */
  63.     /* 为V2建立新的邻接点 */
  64.     NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
  65.     NewNode->AdjV = E->V2;
  66.     NewNode->Weight = E->Weight;
  67.     /* 将V2插入V1的表头 */
  68.     NewNode->Next = Graph->G[E->V1].FirstEdge;
  69.     Graph->G[E->V1].FirstEdge = NewNode;
  70.          
  71.     /* 若是无向图,还要插入边 <V2, V1> */
  72.     /* 为V1建立新的邻接点 */
  73.     NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
  74.     NewNode->AdjV = E->V1;
  75.     NewNode->Weight = E->Weight;
  76.     /* 将V1插入V2的表头 */
  77.     NewNode->Next = Graph->G[E->V2].FirstEdge;
  78.     Graph->G[E->V2].FirstEdge = NewNode;
  79. }
  80.  
  81. LGraph BuildGraph()
  82. {
  83.     LGraph Graph;
  84.     Edge E;
  85.     Vertex V;
  86.     int Nv, i;
  87.      
  88.     scanf("%d", &Nv);   /* 读入顶点个数 */
  89.     Graph = CreateGraph(Nv); /* 初始化有Nv个顶点但没有边的图 */ 
  90.      
  91.     scanf("%d", &(Graph->Ne));   /* 读入边数 */
  92.     if ( Graph->Ne != 0 ) { /* 如果有边 */ 
  93.         E = (Edge)malloc( sizeof(struct ENode) ); /* 建立边结点 */ 
  94.         /* 读入边,格式为"起点 终点 权重",插入邻接矩阵 */
  95.         for (i=0; i<Graph->Ne; i++) {
  96.             scanf("%d %d %d", &E->V1, &E->V2, &E->Weight); 
  97.             /* 注意:如果权重不是整型,Weight的读入格式要改 */
  98.             InsertEdge( Graph, E );
  99.         }
  100.     } 
  101.  
  102.     /* 如果顶点有数据的话,读入数据 */
  103.     for (V=0; V<Graph->Nv; V++) 
  104.         scanf(" %c", &(Graph->G[V].Data));
  105.  
  106.     return Graph;
  107. }

总结:邻接矩阵这东西,就是没学过都能自己写出来。而邻接表的话,不看代码光思路也十分简单,就是代码有点乱,毕竟三个结构体混合使用,害我看得晕乎乎

06-图3 六度空间 (30分) (2020浙大Mooc数据结构配套题) “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。 图1 六度空间示意图 “六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史... 阅读详情

相关推荐

保研技术面避坑大全:我被北邮、浙大、中科院连环拷问的专业课真题复盘

本文详细解析了计算机专业保研技术面试中的高频考点与实战策略,涵盖数据结构、计算机组成原理、操作系统等核心课程。通过北邮、浙大、中科院等顶尖院校的真实面试真题复盘,提供避坑指南和应对技巧,帮助考生在保研夏令营、预推免等环节脱颖而出。

weixin_30387423的博客 483

图1

一、已知一个无向图如下图所示,试给出该图的邻接矩阵和邻接表存储示意图(画图,分别用矩阵和数组链表图表示),并编程分别实现该图的邻接矩阵表示和邻接表表示,要求编写两种表示方法的存储结构、相关基本操作,并在主函数中创建该图。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBJgsuUj-1612100005447)(图.assets/clip_image002.jpg)] 邻接矩阵表示法 #include <iostream> #define maxValue ma

flamesfather的博客 983

【预览】计算机考研复试、保研算法机试|笔记和代码模板|最全总结

[预览]计算机考/保研机考算法完全总结 在好久之前我就写好了这一份笔记,尽管覆盖了很多知识点,但美中不足的一点是,在我整理笔记的时候,都没有给代码写注释(因为自己写的代码自己都看得懂嘛)。 对于需要快速学习机试重点知识的人,以及在考前要快速复习的人来说,看一遍(没有任何注释的)完整版笔记是一个过于庞大的任务。 那么在这里,我为大家总结了一份精华版考研保研参考算法笔记,添加了更多的说明和注释,方便我自己查阅,也给大家的复习提供了方便。 文章目录[预览]计算机考/保研机考算法完全总结参考书和刷题题库必考算法

Joe_Morningstar的博客 5077

图的邻接矩阵代码实现

/* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightType; /*

u010232308的博客 1805

计算机考研复试、保研算法机试|笔记和代码模板|最全总结

计算机考/保研机考算法完全总结 在好久之前我就写好了这一份笔记,尽管覆盖了很多知识点,但美中不足的一点是,在我整理笔记的时候,都没有给代码写注释(因为自己写的代码自己都看得懂嘛)。 对于需要快速学习机试重点知识的人,以及在考前要快速复习的人来说,看一遍(没有任何注释的)完整版笔记是一个过于庞大的任务。 那么在这里,我为大家总结了一份精华版考研保研参考算法笔记,添加了更多的说明和注释,方便我自己查阅,也给大家的复习提供了方便。 文章目录计算机考/保研机考算法完全总结参考书和刷题题库必考算法快速排序质数判断

Joe_Morningstar的博客 1179

统信UOS服务器上,达梦DM8数据库安装避坑全记录(附大小写敏感设置)

本文详细介绍了在统信UOS服务器版上部署达梦DM8数据库的全过程,包括环境准备、安装流程、数据库实例初始化及关键参数配置,特别是大小写敏感设置的注意事项。提供了从系统配置到性能优化的完整指南,帮助用户避免常见问题,确保数据库稳定运行。

weixin_30647423的博客 332

最小生成树prim算法适合稠密图(网络整理)8.12

#include #include /* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; /*

凤凰涅磐 9034

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复

本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。

weixin_29010003的博客 397

图-图的建立

1.邻接矩阵表示法 /* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightTyp...

Jake1223的博客 532

CTF实战:手把手教你用Python破解转轮机加密(附完整脚本)

本文详细介绍了如何使用Python逆向破解转轮机加密,特别针对CTF比赛中的Crypto类题目。通过解析转轮机加密原理、实战Python脚本编写及调试技巧,帮助参赛者快速掌握破解方法,提升在攻防世界等CTF比赛中的解题效率。

silver的专栏 1116

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

数据结构:图的存储结构之邻接矩阵(摘自网易云课堂)

/* 图的邻接矩阵表示法(C语言实现) */ #define  MaxVertexNum  100      /* 最大顶点数设为100 */ #define  INFINITY  65535     /* ∞设为双字节无符号整数的最大值65535*/ typedef  char  VertexType;      /* 顶点类型设为字符型 */ typedef  int  EdgeTyp

woshiyeeyihsow的专栏 582

避开这些坑!QMT多因子策略实盘中的5个常见错误及解决方案

本文深入剖析了在QMT平台上实施多因子策略时常见的5个错误,包括因子过拟合、数据延迟处理不当、因子失效、交易成本低估和风险控制缺失,并提供了实用的解决方案。通过优化因子筛选、数据对齐和动态管理,帮助量化交易者提升策略稳健性和实盘表现。

k5l6m的博客 238

Dijkstra算法解决最短路径问题

title: Dijkstra算法解决最短路径问题 date: 2020-01-07 16:18:25 tags: 数据结构 单源最短路径问题:计算源点到其他各个顶点的最短路径长度 全局最短路径问题:图中任意两个节点之间的最短路径 以上两个问题均可以归结为最短路径问题(事实上对每个结点进行求单源最短路径就可以解决全局最短路径) Dijkstra算法用于解决单源最短路径,但是不能求带负边权的最短路...

路遥知码力的博客 1540

图机器学习(9)——图正则化算法

网络信息能够有效约束模型行为,确保相邻节点的输出保持平滑过渡——这种特性在半监督场景中尤其重要,可实现未标注节点的信息传播。更进一步,这种机制也可用于正则化学习过程,从而提升模型在未见样本上的泛化能力。在本节中,我们探讨了在学习阶段应用正则化技术的方法,用于显著提升模型的鲁棒性,使其具备更优异的泛化能力。

盼小辉丶的博客 8992

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

考研机试数据结构通关指南与实战技巧

数据结构是计算机科学的核心基础,其核心原理包括数据的存储、组织和管理方式。在算法设计与程序开发中,高效的数据结构能显著提升运算效率,降低时间复杂度。考研机试特别注重数据结构的实战应用,如数组、链表、树、图等结构的快速操作与算法实现。通过二分查找、快慢指针、DFS/BFS等经典算法,可以解决大多数机试题目。掌握这些技术不仅能应对考试,也是软件开发中处理海量数据、优化系统性能的关键。本文以考研机试为场景,详解数据结构的高频考点与解题模板,帮助考生快速提升编码能力与应试技巧。

weixin_30231327的博客 242

mapbox高阶,加载倾斜摄影

本文详细介绍如何基于mapbox-gl v3.8.0版本实现倾斜摄影的加载,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 345

浙大PTA数据结构刷题避坑指南:从“最大子列和”到“朋友圈”的实战心得

本文分享浙大PTA数据结构刷题实战心得,从‘最大子列和’到‘朋友圈’等经典题型,提供四维分析法、高频算法剖析及代码优化技巧。重点讲解动态规划、并查集等核心算法,帮助读者高效备考PTA数据结构考试,避免常见错误,提升解题效率。

weixin_42524276的博客 329

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

(c语言)Forwards on Weibo (30分)(图(上)附加题)

关于数据结构Mooc后的每一道答案 基本我都已经给出了详解 希望能对大家有所帮助 收藏一下也是方便大家查找吧 希望大家一起进步! (c语言)浙大数据结构Mooc作者答案集 原题题目 闲谈 做这个附加题很明显 也是为了再加深一点自己对图的理解 还是可以的 这道题很明显 因为之前就发现了 有的时候邻接矩阵的时空复杂度更高 而且占用的空间相对很小的浪费很对 所以这道题刚开始的时候就选择了邻接表 也是没花多久吧 中间还是调试了一下 之后就发现最后一个存档点过不了 之后才发现 MAX是1000 :) 这里要

Love 6's Private Blog 425

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

图没有那么难系列1---基本定义和实现

导言: 图,是数据结构中非常重要的一部分。我们之前学过的树,其实都可以算是图的一种特例。所以我们需要对图有非常深刻的理解才能够自如地使用图这个数据结构. 1.什么是图? 在回答什么是图之前,我们需要回答一下什么是数据结构。数据结构就是计算机存储数据的一种方式,这种方式可以方便我们进行排序,遍历,查找等等。所以,图也就是 一种存储数据结构的方式。一堆数据在计算机中怎么去表示呢?之前我们有栈,...

weixin_30389003的博客 87

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

浙大PTA数据结构题解:从“最大子列和”到“社交网络”,我是如何用C++刷穿这30道题的

本文分享了如何通过刷PTA数据结构30题提升算法思维,从最大子列和到社交网络问题,详细解析了C++实现各类数据结构的技巧与优化方法。涵盖线性结构、树形结构、图形结构等核心知识点,并提供了从暴力解法到最优算法的进化路径,帮助读者高效备战算法竞赛与数据结构学习。

weixin_30876945的博客 249

hdu 1285 确定比赛名次 (浙大拓扑排序模板)

忘记了memset一下,WA了数次 #include using namespace std; const int maxn=500+10; int map[maxn][maxn],p[maxn]; int toposort(int n,int mat[][maxn],int *ret){ int d[maxn],i,j,k; for(i=0;i<n;i++) f

beat anyone if necessary 1159

HDU1874 畅通工程续【Dijkstra算法+Floyd算法】

畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 96889 Accepted Submission(s): 37277 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短

海岛Blog 1159

Dijkstra最短路径模板2

Dijkstra最短路径模板1见http://blog.youkuaiyun.com/abcjennifer/article/details/7243297 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9321

Rachel Zhang的专栏 5868

最小生成树 Prim、Kruscal算法 (以HDU 1863为例)

畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32680 Accepted Submission(s): 14407 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公

Ever_glow的博客 1309
上一篇: 06-图3 六度空间(邻接表练习)(BFS)
下一篇: 07-图5 Saving James Bond - Hard Version (最短路径)(bfs)
MMMMMMMW
博客等级 码龄9年 34粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值