邻接表创建无向表(C++ 代码)

news2024/11/25 22:56:40

 

#include<iostream>//邻接表创建无向表
#define MVNum 100
using namespace std;
typedef char VerTexType;
typedef struct Arcnode//边节点
{
	int adjvex;//该边所指向的顶点的位置
	struct Arcnode* nextarc;//指向下一条边的指针
}Arcnode;
typedef struct vnode//顶点节点
{
	VerTexType data;//顶点信息
	Arcnode* firstarc;//指向第一条依附该顶点的边的指针
}Vnode,AdjList[MVNum];
typedef struct//图
{
	AdjList vertices;//头顶点
	int vexnum, arcnum;//图当前顶点数和边数
}ALGraph;
int LocateVex(ALGraph G, VerTexType u)
{
	for (int i = 0; i < G.vexnum; i++)
		if (u == G.vertices[i].data) return i;
	return -1;
}
bool CreateUDG(ALGraph& G)
{
	cin >> G.vexnum >> G.arcnum;//输入总顶点数,总边数
	for (int i = 0; i < G.vexnum; i++)//输入各点,构造表头结点表
	{
		cin >> G.vertices[i].data;//输入顶点值
		G.vertices[i].firstarc = NULL;//初始化表头节点指针域
	}
	VerTexType v1, v2;
	for (int k = 0; k < G.arcnum; k++)
	{
		cin >> v1 >> v2;//输入边相邻节点
		int i = LocateVex(G, v1);
		int j = LocateVex(G, v2);//确定v1,v2位置
		Arcnode* p1,*p2;
		p1 = new Arcnode;//生成一个新的边节点
		p1->adjvex = j;//邻节点序号为j
		p1->nextarc = G.vertices[i].firstarc;
		G.vertices[i].firstarc = p1;//将新节点插入顶点vi的边表头部
		p2 = new Arcnode;
		p2->adjvex = i;//邻接点序号为i
		p2->nextarc = G.vertices[j].firstarc;
		G.vertices[j].firstarc = p2;//将新节点插入顶点vj的表头部
	}
	return 1;
}
bool Print(ALGraph& G)
{
	cout << "邻接表:" << endl;
	for (int i = 0; i < G.vexnum; i++)
	{
		cout << G.vertices[i].data << " ";
		while (G.vertices[i].firstarc != NULL)
		{
			cout << G.vertices[G.vertices[i].firstarc->adjvex].data << " ";
			G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc;
		}
		cout << endl;
	}
	return 1;
}
int main()
{
	ALGraph G;
	CreateUDG(G);
	Print(G);
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/872919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】二叉树篇| 纲领思路02+刷题

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 所谓自由&#xff0c;不是随心所欲&#xff0c;而是自我主宰。——康德 目录 一、前言二、刷题1、翻转二叉树 2、二叉树的层序遍历✨3、 二…

SpringMVC 详细教程及源码讲解

目录 一、SpringMVC简介1. 什么是MVC&#xff1f;2.什么是SpringMVC?3.SpringMVC的特点&#xff1f; 二、SpringMVC入门案列1. 开发环境2. 创建Maven工程2.1 添加web模块2.2 引入依赖 3. 配置web.xml3.1 默认配置方式3.2 扩展配置方式 4.创建请求控制器5. 创建SpringMVC的配置…

基于ChatGLM的Deepin文档问答Bot

一、背景介绍 题目来源&#xff1a;2023全国大学生计算机系统能力大赛操作系统设计赛-功能挑战赛题目地址&#xff1a;proj225-document-question-answering-bot题目描述&#xff1a;https://wiki.deepin.org 上有900多条deepin系统相关的中文教程和词条&#xff0c;请编写能根…

【第358场周赛】翻倍以链表形式表示的数字,Java解密。

LeetCode 第358场周赛 恒生专场。 文章目录 剑指Offer:翻倍以链表形式表示的数字示例:限制:解题思路:剑指Offer:翻倍以链表形式表示的数字 【题目描述】 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。 将链表 翻倍 后,返回头节点 head 。 示例…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

第四课 学习动词短语

文章目录 前言动词短语动副词组及物动副词组实义动词副词介词动宾词组固定特殊可分开动词短语时态变化规则 一、动副词组1、go ahead 先走&#xff0c;进行 不及物go along 前进&#xff0c;向前走&#xff0c;与....一道去go away 走开&#xff0c;离去&#xff0c;逃走&#…

全网最全的接口自动化测试教程

为什么要做接口自动化 相对于UI自动化而言&#xff0c;接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验&#xff0c;APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化&#xff0c;导致自动化的代码频繁变更&#xff0c;没有起到减少工作量的效果。 而…

用友 U8 CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

RK3399平台开发系列讲解(入门篇)Linux内核常见的规则

🚀返回专栏总目录 文章目录 一、编码风格二、内核结构分配和初始化三、面向对象的思想沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在内核代码的演化过程中应该遵守标准规则 一、编码风格 参考一下内核编码风格手册,它位于内核源代码树的 Documentat…

Flink 火焰图

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能,并且可以细化到 subtask 粒度。 第一步:配置启用功能 Flink 作业动态参数里增加配置:“rest.flamegraph.enabled”: “true” 并重启作业。当前该功能没有默认开启,因为这个功…

ROS2 学习(一)介绍,环境搭建,以及个人安装的一些建议

ROS2 学习 学习自b站课程&#xff1a;https://www.bilibili.com/video/BV16B4y1Q7jQ?p1 &#xff08;up主&#xff1a;古月居GYH&#xff09; ROS 介绍 Robot OS&#xff0c;为机器人开发提供了相对完善的 middleware&#xff0c;工具&#xff0c;软件等。 ROS1 对嵌入式设…

ProsperEx 的野望:借势 RWA 浪潮,构建全新的链上衍生品体系

真实资产代币化&#xff08;RWA&#xff09;并不是一个新概念了&#xff0c;以 USDT、USDC、DAI 等一系列美元稳定币是行业内最早的 RWA 概念资产&#xff0c;这些资产以美元为价值基础通过不同信用的机制&#xff0c;将其价值映射至链上&#xff0c;并以加密货币的形式体现&am…

关于memset的小实验

关于memset的小实验 memset是包含在<string.h>的函数&#xff0c;用来给字符数组赋值。然而人们常常把它拿来给整型变量赋值。 void *MEMSET (void *dstpp, int c, size_t len)memset是一个返回通用指针的函数&#xff0c;返回的地址便是输入的地址 int c表示对这块内…

Linux学习之awk函数

awk里边的函数分为内置函数和自定义函数。 内置函数有下边的几种&#xff1a; 算术函数&#xff08;arithmetic&#xff09; 字符串函数&#xff08;string&#xff09; 输入/输出函数和通用函数&#xff08;input/output, and general&#xff09; 自定义函数格式如下&#xf…

企业计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着计算机技术的不断发展&#xff0c;企业的办公系统得到了很大提升&#xff0c;但是随之而来的网络安全威胁也不断增加&#xff0c;勒索病毒的攻击事件时有发生。近期&#xff0c;我们收到某地连锁超市的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#x…

【算法题】螺旋矩阵III (求解n阶蛇形矩阵)

一、问题的提出 n阶蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn&#xff0c;其中n为正整数。 题目背景 一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成&#xff0c;观察图片&#xff0c;找出填数规律。填数规则为从 1 开始填到 nn。 图1 …

SPI协议简介

什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是美国摩托罗拉公司&#xff08;Motorola&#xff09;最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口&#xff0c;是一种高速…

[管理与领导-13]:IT基层管理者 - 激励 - 除了薪资奖金,还有哪些激励手段?

目录 前言 第1章 问题现象&#xff1a;对激励的误解 第一个误解&#xff1a;就是激励就是给钱 第二个误解&#xff1a;就是激励当成了升职 第三个误解&#xff1a;把激励当成忽悠 第2章 背后原因 1 没有找到和满足员工真正的需求&#xff1a;不同人&#xff0c;需求不同…

【数据结构与算法——TypeScript】树结构Tree

【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? &#x1f332; 真实的树&#xff1a;相信每个人对现实生活中的树都会非常熟悉 &#x1f332; 我们来看一下树有什么特点&#xff1f; ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…

代码随想录算法训练营之JAVA|第二十六天| 332. 重新安排行程

今天是第26天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 332. 重新安排行程https://leetcode.cn/problems/reconstruct-itinerary/ 第一想法 题目理解&#xff1a;将多个行程的ticket 用第一个行程的结束地点作为下一个行程的开始地点&#xff0c;…