无向图——邻接表和邻接矩阵的实现

2023-10-27

邻接矩阵

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define ms(a) memset(a,0,sizeof(a))
#define N 50
//节点中包括边的个数,顶点的个数,邻接矩阵 
struct node{
	int vn=0;               //顶点 vertex 
	int en=0;				//边   edge 
	int matrix[N][N];
}; 

// 创建图 
void Creategraph(node &G){
	int vn_;
	int en_;
	cout<<"请输入顶点个数和边的个数:"<<endl;
	cin>>vn_>>en_;
	G.en=en_;
	G.vn=vn_;
	int e1,e2;
	//循环输入各边 
	while(en_--){  
		cin>>e1>>e2;
		G.matrix[e1][e2]=G.matrix[e2][e1]=1;
	}
}

//打印图的邻接矩阵 
void Print(node G){
	cout<<"顶点个数为:"<<G.vn<<endl;
	cout<<"边的个数为:"<<G.en<<endl;
	cout<<"邻接矩阵为:"<<endl;
	for(int i=1;i<=G.vn;i++){
		for(int j=1;j<=G.vn;j++){
			cout<<G.matrix[i][j]<<" ";
		}
		cout<<endl;
	}
}

int main(){
	node G;
	ms(G.matrix); 
	Creategraph(G);
	Print(G);
	return 0;
}


邻接表


#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define ms(a) memset(a,0,sizeof(a))
#define N 30
// 边的结构体 
struct edgenode{
	int data;
	edgenode* next=NULL;
};
// 顶点的结构体 
struct vertexnode{
	int data;
	edgenode* firstedge=NULL;
};
//图的结构体 
struct graph{
	int vertexnum;
	int edgenum;
	vertexnode list[N];
};
//创建图 
void Creategraph(graph &G){
	int en_,vn_;
	cout<<"请输入顶点和边的个数:"<<endl;
	cin>>vn_>>en_;
	G.edgenum=en_;
	G.vertexnum=vn_;
	for(int i=1;i<=G.vertexnum;i++){
		G.list[i].data=i;
	}
	int e1,e2;
	while(en_--){
		cin>>e1>>e2;
		edgenode *E1=new edgenode;
		E1->data=e1;
		edgenode *E2=new edgenode;
		E2->data=e2;
		edgenode* tem;
		//把 e1 接在 e2 后面 
		tem=G.list[e2].firstedge;
		if(tem==NULL){
			G.list[e2].firstedge=E1;
		}
		else{
			while(tem->next!=NULL){
				tem=tem->next;
			} 
			tem->next=E1;
		}
		//把 e2 接在 e1 后面 
		tem=G.list[e1].firstedge;
		if(tem==NULL){
			G.list[e1].firstedge=E2;
		}
		else{
			while(tem->next!=NULL){
				tem=tem->next;
			}
			tem->next=E2;
		}
	}
}

//打印图的邻接表 
void Print(graph G){
	cout<<"顶点个数为:"<<G.vertexnum<<endl;
	cout<<"边的个数为:"<<G.edgenum<<endl;
	cout<<"邻接表为:"<<endl;
	edgenode* tem;
	for(int i=1;i<=G.vertexnum;i++){
		tem=G.list[i].firstedge;
		cout<<G.list[i].data<<" -> ";
		while(tem!=NULL){
			cout<<tem->data<<" -> ";
			tem=tem->next;
		}
		cout<<endl;
	} 
}

int main(){
	graph G;
	Creategraph(G);
	Print(G);
	return 0;
}





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

无向图——邻接表和邻接矩阵的实现 的相关文章

  • 邻接矩阵

    题目描叙 xff1a 无向图的表示方法邻接矩阵 xff0c 需打印到屏幕 有权 分析 xff1a 邻接矩阵的核心思想便是顶点表和边表 我们可以定义一个结构体 xff0c 里面包含一个顶点表 xff08 即一个vexs一维数组 xff09 x
  • c++ string函数详细返回值及用法!

    通过在网站上的资料搜集 得到了很多关于string类用法的文档 通过对这些资料的整理和加入一些自己的代码 就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了 下面先罗列出string类的函数有哪一些 然后再罗列出函数的原型
  • c++模板的成员模板

    成员模板 成员模板 一个类 无论是普通类还是模板类 可以包含本身是模板的成员函数 成员模板不能是虚函数 普通类的成员模板 class DebugDelete public DebugDelete std ostream s std cerr
  • 网络流经典模型——最大权闭合子图

    网络流经典模型 最大权闭合子图 什么是闭合子图 闭合子图的概念 通俗点说就是选出一个图的子图 使得子图中的所有点出度指向的点依旧在这个子图内 则说明此子图是闭合子图 如下图 最大权闭合子图 假设每个点具有点权值 在一个图的所有闭合子图中 点
  • 无向图——邻接表和邻接矩阵的实现

    邻接矩阵 include
  • sgi_stl源码学习,解析set、map背后的_Rb_tree源码(未完待续)

    参考资料 chatGPT先推荐的 算法导论 第13章 不过我手头没有这本书 https www cnblogs com skywang12345 p 3245399 html chatGPT推荐的 外加sgi stl源码 个人觉得通过源码理
  • 【c++模板笔记一】模板的介绍及其重载

    2015年2月11日 周三晴 有一段时间没有更新博客了 这几天在整理前段时间所学的c 知识点就没有更新了 最近开始研究c 的模板的STL 于是开始继续写下自己的一点所得吧 模板和STL都是c 中比较实用的东西 能把我们省下很多事情 简化编码
  • 草稿

    文档信息 版权声明 自由转载 非商用 非衍生 保持署名 Creative Commons BY NC ND 3 0 博 主 lyc daniel 博主邮箱 lyc daniel 163 com
  • 丑数打表 & 计算 (自用)

    丑数定义 只包含因子2 3 5的正整数被称作丑数 define min a b a lt b a b define min4 a b c d min min a b min c d int choushu 5850 int main int
  • C++模板-泛型函数与泛型类

    泛型 在调用函数或使用该类时才指定特定的类型 可以避免重复写类似功能代码 那C 语言如何定义泛型呢 Author W 泛型 模板 只有在调用或使用该函数或类时 才确定类型 1 泛型函数 2 泛型类 引入标准输入输出流 include
  • 树的Hash方法?

    写这篇博文的主要还是因为自己菜得抠脚 弱校联盟的十一专场的第三天是JAG Practice Contest for ACM ICPC Asia Regional 2016 其中的E题大意是给一颗有根树 问有多少对子树每个深度的节点数都相同
  • 字符串学习&总结(感觉主要是总结模板)

    目录 前言 一 哈希 导读 HASH模板 哈希 双哈希 hash应用 hash牛逼克拉斯 0 核心操作 求子串哈希值 1 字符串匹配 2 允许k次失配的字符串匹配 3 最长回文子串 hash操作简单 可解决的问题有点多啊 nice 4 最长
  • C++类模板中的友元函数的声明和定义分别放在哪里

    前面提到了模板的声明和定义推荐都放在头文件中 那么该类中的友元函数的声明和定义该放在哪里呢 因为友元函数并不属于这个类 按照习惯 我们一般把声明放在类中 而把定义放在类的外面 但对于类模板来说 这样就出问题了 很多编译器并不支持将友元函数的
  • Vue.js 2 渐进式前端框架 的最佳学习方法

    Vue js作为一个后起的前端框架 借鉴了Angular React等现代前端框架 库的诸多特点 并且 取得了相当不错的成绩 Vue js的定位是一个渐进式框架 作者的说法是 与其他框架的区别就是渐进式的想法 也就是Progressive
  • STL十大容器 之 list

    特点 内存不连续 底层实现是链表 插入和删除的效率比较快 随机访问效率比较低 和vector相比 不再需要 capacity 和 reserve 操作 因为链表没有大小限制 不需要为了效率增加预分配内存的功能 一 插入和删除 push ba
  • 无向图

    概念轰炸 图是由一组顶点和一组能够将两个顶点连接的边组成的 x y表示x到y的一条边 一条连接一个顶点和其自身的边称为自环 连接同一对顶点的两条边称为平行边 含有平行边的图称为多重图 某个顶点的度数即为依附于它的边的总数 当两个顶点通过一条
  • (模板)米勒罗宾素数测试

    18位素数 154590409516822759 19位素数 2305843009213693951 梅森素数 19位素数 4384957924686954497 LL prime 6 2 3 5 233 331 LL qmul LL x
  • c++模板实参推断

    模板实参推断 类型转换与模板类型参数 template
  • C++模板学习

    文章目录 1 C 模板 2 函数模板 Function templates 2 1 函数模板分类 3 类模板 Class templates 4 参考资料 1 C 模板 模板定义 模板是实现代码重用机制的一种工具 它可以实现类型参数化 即把
  • c++类模板与友元

    友元 前置声明 在Blob中声明友元所需要的 为了引用模板的一个特定实例 必须首先声明模板自身 template

随机推荐

  • SimpleFOC之ESP32(九)—— WIFI、UDP和TCP

    目录 说明 一 网络通信 1 1 准备工作 1 2 UDP通信 1 3 TCP通信 二 硬件准备 三 代码参考 四 代码演示 4 1 WIFI AP模式UDP通信 4 2 WIFI STA模式TCP client通信 五 UDP通信控制电机
  • Leetcode日练4 #34 search for a range

    第三种二分法是要求当下算出中值的左右相邻的值 也就是说每一次都要判别至少3个值 最后是应该剩两个值 34 Search for a Range Given an array of integers nums sorted in non de
  • Rockchip Pinctrl 开发文档

    Rockchip Pinctrl 开发文档 前言 概述 本文介绍Rockchip PIN CTRL驱动及DTS使用方法 产品版本 芯片名称 内核版本 RK3568 RK3399 RK3368 RK3288 PX30 RK3128 RK312
  • 一篇文章教小白学会搭建 vite + ts + vue3 项目,手把手教程,不会算我输

    目录 一 基础环境和工具 1 使用 pnpm 代替 npm 2 使用 pinia 代替 vuex 3 使用 windicss 4 使用 vscode 5 使用 sourcetree 6 了解 vite ts vue 二 项目搭建 1 流程图
  • Java voliate关键字常见面试题

    1 什么是 volatile 关键字 它的作用是什么 volatile 是 Java 中的关键字 用于声明一个变量是 易变 的 即可能被多个线程同时修改 它的主要作用是保证对该变量的读写操作具有可见性 即一个线程对该变量的修改对其他线程是可
  • Lua : 循环就三种,谁用谁知道

    Lua中的循环 分为while 循环 for循环和 repeat until 循环 语法比较简单 看看例子就秒懂了 while循环 while 循环 while condition do statement end local a 0 wh
  • android 仿ios右滑退出当前activity

    1 概述 iPhone的用户在使用APP的时候 打开很多页面想关闭的时候只需要在屏幕的左侧向右滑动即可退出当前页面 这是iPhone没有返回键的原因 但是这个效果很炫酷呀 能应用在Android上不是更好吗 今天就来讲一个这个功能的实现 不
  • 【C++】string

    C 修炼秘籍 string 目录 C 修炼秘籍 string 文章目录 前言 一 标准库里的string 二 string常用接口功能简介 具体使用和底层转到模拟实现 1 string类的常见构造函数 2 string类对象的容量操作 3
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Vue中DOM的更新为什么是异步的?

    在 Vue 中 DOM 的更新是异步的机制是为了优化性能和提升用户体验 这个机制被称为 异步更新队列 Vue的异步更新队列机制是其实现高效渲染的关键 它通过将多次数据变化合并到一个批处理中 从而减少了不必要的DOM操作 提高了性能 下面是V
  • costmap 代价地图

    转自 https sychaichangkun gitbooks io ros tutorial icourse163 content chapter10 10 3 html 10 3 costmap costmap是Navigation
  • 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=15873837810484552531 中的...

    coding gbk 嵩天老师的零基础Python笔记 https www bilibili com video av13570243 from search seid 15873837810484552531 中的15 22讲 数字类型的
  • python批量发送带附件的邮件时,收到的附件名异常且后缀为bin,解决办法

    1 问题描述 在使用 Python 内置的模块 smtplib 发送带中文名的附件邮件时 数据可以正常传输 但是但收件人收到的附件格式是bin 附件名也不是发送时的名称 附注 smtp Simple Mail Transfer Protoc
  • 进一步理解angular

    在上一篇文章中我介绍了安装和结构 以及运行过程 https blog csdn net weixin 42603009 article details 94382945 我们进一步理解其中的数据单向 双向 组建传值 Modules等的理解
  • C语言编译过程、VIM常用命令

    一 编译过程 1 预处理 gcc E 源文件 c o 源文件 i 预处理宏以及注释 2 编译 gcc S 源文件 i o 源文件 s 通过编译转换为汇编文件 3 汇编 gcc c 源文件 s o 源文件 o 经汇编转换为二进制文件 4 链接
  • linux创建链接文件

    链接文件的创建 1 概念 链接文件就类似我们windows的快捷方式 只保留目标文件的地址 不占用存储空间 使用链接文件与使用目标文件的效果是一样的 2 为什么要使用链接文件 在windows都会把文件放在一个比较大的磁盘中 我们每次需要使
  • ChatGPT 速通手册——GPT 训练数据集介绍

    GPT 训练数据集介绍 所有人工智能算法都会分为训练和推理两步 算法的效果好坏 很大程度上取决于训练数据本身的质量 ChatGPT 所用的训练数据 openai 公司没有单独公布过细节 不过考虑到 ChatGPT 是在前序 GPT 算法基础
  • linux使用记录(一)

    1 tar 解压tar xvf file tar 解压 tar包 tar xzvf file tar gz 解压tar gz tar xjvf file tar bz2 解压 tar bz2 tar xZvf file tar Z 解压ta
  • 使用ADO.NET访问数据库

    一 ADO NET 数据库访问的方法和技术 二 ADO NEt的重要组件 1 DataSet 独立于数据源的数据访问 2 Net framework数据提供程序 用于连接到数据库执行命令和检索结果 三 NET数据提供程序的四个核心对象 1
  • 无向图——邻接表和邻接矩阵的实现

    邻接矩阵 include