【数据结构】采用邻接矩阵表示法创建无向网、无向图、有向图、有向网

2023-11-11

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、无向网(∞/权值,对称)

1、思路

2、代码

3、运行结果

三、其他

(1)无向图(0/1,对称)

(2)有向网(∞/权值,不对称)

 (3)有向图(0/1,不对称)​​​​​​​


一、无向网

1、思路:

(1)输入总顶点数和总边数

(2)依次输入顶点的信息放入顶点表中

(3)初始化邻接矩阵,极大值∞

(4)构造邻接矩阵


2、代码

#include<iostream> 
using namespace std;
#define MaxInt 32767  //表示极大值 
#define MVNum 100  //最大顶点数 
typedef char VerTexType;   //设置顶点类型为字符型 
typedef int ArcType;    //设置权重为整型 

typedef struct{
	VerTexType vexs[MVNum];    //顶点表 
	ArcType arcs[MVNum][MVNum];   //邻接矩阵 
	int vexnum,arcnum;  //顶点数和边数 
}AMGraph;

从顶点表中查找顶点 
int LocateVex(AMGraph G,VerTexType u){  
	int i;
	for(i=0;i<G.vexnum;i++)
		if(u==G.vexs[i]) return i; 
	return -1;
} 

//构造无向网
int CreateUDN(AMGraph &G){
	int i,j,k;
	cout<<"请输入顶点数和边数:";
	cin>>G.vexnum>>G.arcnum;     //输入顶点数和边数 
	cout<<"输入顶点:";
	for(i=0;i<G.vexnum;i++)     
		cin>>G.vexs[i];       //顶点表 
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
			G.arcs[i][j]=MaxInt;    //初始化邻接矩阵 
	
	for(k=0;k<G.arcnum;k++){    //构造邻接矩阵 
		VerTexType v1,v2;
		ArcType w;
		cout<<"请输入依附的顶点和权值:";
		cin>>v1>>v2>>w;
		i=LocateVex(G,v1);    
		j=LocateVex(G,v2);
		G.arcs[i][j]=w;  //边(v1,v2)权重置为w 
		G.arcs[j][i]=G.arcs[i][j];   //无向网,对称 
	}
	return 1;
} 

void Show(AMGraph G){  
	int i,j;
	for(i=0;i<G.vexnum;i++){
		for(j=0;j<G.vexnum;j++)
			if(G.arcs[i][j]==MaxInt) cout<<"∞"<<' ';
			else cout<<G.arcs[i][j]<<' ';
		cout<<endl;	
		}

}

int main(){
	AMGraph G;
	CreateUDN(G);
	cout<<endl<<"构造的无向网为:";
	Show(G);
	return 1;
}

3、运行结果

 


三、其他

(1)无向图

 初始化邻接矩阵时,w均为0

构造邻接矩阵时,w为1

//构造无向图
int CreateUDG(AMGraph &G){
	int i,j,k;
	cout<<"请输入顶点数和边数:";
	cin>>G.vexnum>>G.arcnum;
	cout<<"输入顶点:";
	for(i=0;i<G.vexnum;i++) cin>>G.vexs[i];
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
			G.arcs[i][j]=0;      //初始化邻接矩阵,权为0
	
	for(k=0;k<G.arcnum;k++){
		VerTexType v1,v2;
		ArcType w;
		cout<<"输入依附的顶点:";
		cin>>v1>>v2;
		i=LocateVex(G,v1);
		j=LocateVex(G,v2);
		G.arcs[i][j]=1;    //构造邻接矩阵,权为1
		G.arcs[j][i]=G.arcs[i][j];
	}
	return 1;
} 

 

(2)有向网

非对称,无需G.arcs[j][i]=G.arcs[i][j]

//构造有向网
int CreateDN(AMGraph &G){
	int i,j,k;
	cout<<"请输入顶点数和边数:";
	cin>>G.vexnum>>G.arcnum;     
	cout<<"输入顶点:";
	for(i=0;i<G.vexnum;i++)     
		cin>>G.vexs[i];       
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
			G.arcs[i][j]=MaxInt;     
	
	for(k=0;k<G.arcnum;k++){    
		VerTexType v1,v2;
		ArcType w;
		cout<<"请输入依附的顶点和权值:";
		cin>>v1>>v2>>w;
		i=LocateVex(G,v1);    
		j=LocateVex(G,v2);
		G.arcs[i][j]=w;  
		//G.arcs[j][i]=G.arcs[i][j];   //去掉该条语句 
	}
	return 1;
} 

 

 (3)有向图

初始化w为0

构造时w为1

无需G.arcs[j][i]=G.arcs[i][j]

//构造有向图 
int CreateDG(AMGraph &G){
	int i,j,k;
	cout<<"输入顶点数和边数:";
	cin>>G.vexnum>>G.arcnum;
	cout<<"输入顶点:";
	for(i=0;i<G.vexnum;i++) cin>>G.vexs[i];
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
			G.arcs[i][j]=0;     //初始化为0 
	
	for(k=0;k<G.arcnum;k++){
		VerTexType v1,v2;
		cout<<"输入依附的顶点:";
		cin>>v1>>v2;
		i=LocateVex(G,v1);
		j=LocateVex(G,v2);
		G.arcs[i][j]=1;  //构造时权重为1 
	} 
	return 1;
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】采用邻接矩阵表示法创建无向网、无向图、有向图、有向网 的相关文章

  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Java框架SSM学习——持久层Mybatis之动态SQL

    动态SQL 为什么要用动态SQL 如果使用JDBC或者类似Hibernate等其他框架 很多时候需要去根据需要去拼接SQL语句 这是一个很麻烦的事情 因为在某些查询中 需要多个条件 在使用其他框架的时候 需要用大量的Java代码进行判断 可
  • Windows Cluster 分布式算法

    在分布式系统中 都需要解决分布式一致性问题 那么 在Windows 集群中 使用了什么算法来保证集群的一致性呢 Paxos Windows Server 故障转移集群 WSFC 使用 Paxos 算法在整个系统中同步更改 通过记录 Paxo
  • 计算机四级网络考试容易蒙吗,计算机四级网络工程师通过率有多少

    计算机四级网络工程师通过率怎么样 我们都知道计算机四级网络工程师非常的难考 所以想大概知道下通过率是怎样的 给自己保个底 所以下面就由小编来给大家说说计算机四级网络工程师通过率是怎么样的吧 欢迎大家前来阅读 计算机四级网络工程师通过率 计算
  • C++宏定义

    define是C语言中提供的宏定义命令 其主要目的是为程序员在编程时提供一定的方便 并能在一定程度上提高程序的运行效率 用处 define命令是C语言中的一个宏定义命令 它用来将一个标识符定义为一个字符串 该标识符被称为宏名 被定义的字符串
  • Servlet[搭建web开发环境,将项目部署到服务器、创建web程序]

    目录 web开发环境搭建 创建web后端项目并部署到服务器的步骤 创建web后端程序 如何搭建后端服务器 如何开发后端服务器程序 实现前后端交互 开发第一个web应用程序 什么是服务器 广义上的服务器 计算机硬件 计算机软件 狭义上的服务器
  • docker镜像的导出与导入

    内网干活的忧桑大概就是偷点懒 使用docker镜像 dockerfile中使用的镜像内网中却没法down下来 so 找个外网机 先把需要的镜像下载下来 再将下载好的镜像载入到内网机 通过查资料 docker镜像的导入导出命令有save lo
  • 前端组件Bootstrap4(学习笔记一)

    Hello 大家好 今天要分享的文章仍然是关于前端的 为什么迟迟没有关于Android相关的文章呢 其实这个公众号一开始 我就有明确的表示 它不仅仅局限于Android 我希望它可以博采众长 以Android为主 其它技术为辅 夹杂一些社会
  • Unity3D之UI按键绑定事件案例(七)

    七 多个按键事件存在的时候怎么区分 怎么同时绑定事件 下面的案例可以给出答案 第一步 通过Hierarchy面板创建多个button 第二步 创建一个名为Buttons的脚本 代码如下 public class MyEventArgs pu
  • web前端可视化开发,前端优秀实践指南,知乎上已获万赞

    前言 跳槽 这在 IT 互联网圈是非常普遍的 也是让自己升职加薪 走上人生巅峰的重要方式 那么作为一个普通的Android程序猿 我们如何才能斩获大厂offer 呢 疫情向好 面试在即 还在迷茫踌躇中的后浪们 如何才能在面试中让自己脱颖而出
  • Qt自定义控件 —— 颜色选择组合控件

    在开始阅读本文之前 如果您有学习创建Qt自定义控件并在其他项目中引用的需求 请参考 Linux系统下在Qt Creator中创建自定义控件并在其他项目中引用https blog csdn net YMGogre article detail
  • head 请求了解过吗?如何用 get 模拟 head 请求?不需要服务器返回数据,怎么实现?

    HEAD请求是HTTP 1 1协议中定义的一个请求方法 与GET请求相似 但只请求目标URL的头部 不请求实际的数据或者说正文内容 其主要用途是 检查资源是否被修改 检查资源是否存在 校验缓存有效性 了解服务器性能 要用GET请求模拟HEA
  • [已解决]“ImportError: No module named flask”

    1 删除原有的用大写开头的Flask插件 pip uninstall Flask 2 yum安装 flask yum install python flask 3 等待安装完成就可以允许程序啦 100 有用
  • 快速编写json数据

    1 打开idea 2 新建txt文件 alt 单击快速加 编写json数据
  • C语言面试必问的经典问题(纯”gan“货)

    C语言面试必问的经典问题 1 预处理 1 预编译 编译过程最先做的工作是啥 何时需要预编译 指令有什么 答 预编译就是预处理 就是把一些文本的替换工作工作 预编译指令 include ifdef ifndef else endif 编译 字
  • 高德地图Js API的使用

    申请JSAPI的开发者key 申请地址 http lbs amap com dev key 引入高德地图JavaScript API文件 创建地图容器 在页面body里你想展示地图的地方创建一个div 容器 并指定id标识 div div
  • Python-Pyqt6之QIntValidator,QDoubleValidator无法限制数值范围的正则表达式解决方案

    在使用Pyqt6进行GUI设计的时候 在需要输入数值 整型 浮点型 的时候选择使用了QLineEdit这个组件控件 详情介绍 QLineEdit组件详情 QLineEdit自带的setValidator包含 QIntValidator QD
  • promise函数几种写法与坑

    promise是ES6中引入的处理异步函数的强大特性 但是对promise的不恰当使用可能会达不到最终目的 对这个问题的探究来源于这篇文章关于promises 你理解了多少 几个异步函数如下 resolve或reject在回调函数里被调用
  • 网络编程的几种I/O模式

    1 非阻塞I O 非阻塞I O 若想网络编程时调用I O函数不想让程序阻塞 需要使用I O复用技术 一个方法是poll 轮询 所谓轮询就是执行函数时 如果内核不能立即对应用的函数进行响应时 就返回给应用一个错误 而应用不停的循环调用该函数
  • JavaScript表示不背小数计算存在误差的锅

    浮点数的最高精度是17位小数 但是在实际计算时会产生莫名其妙的问题 如0 1 0 2的结果不是0 3 而是0 30000000000000004 这个舍入误差会导致无法测试特定的浮点数值 例如 var a 0 1 b 0 2 if a b
  • 【数据结构】采用邻接矩阵表示法创建无向网、无向图、有向图、有向网

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 一 无向网 权值 对称 1 思路 2 代码 3 运行结果 三 其他 1 无向图 0 1 对称 2 有向网 权值 不对称 3 有向图 0 1 不对称 一 无向网 1 思路