GDPU 数据结构 天码行空11

news2024/11/17 1:54:23

文章目录

  • 数据结构实验十一 图的创建与存储
    • 一、实验目的
    • 二、实验内容
    • 三、【实验源代码】
      • 🍻 CPP版
      • 🍻 c 语言版
      • 🍻 java版
    • 四、【实验结果】
    • 五、【实验总结】

数据结构实验十一 图的创建与存储

一、实验目的

1、 理解图的存储结构与基本操作;
2、 掌握图的创建过程

二、实验内容

1.请把下图以邻接矩阵的结构存储,并打印输出此邻接矩阵。
图的创建代码参考教材例题.
提示:首先构建图的逻辑模型,得出该图的顶点集和边集,调用相应的函数生成图的邻接矩阵,并打印出邻接矩阵。
2.用邻接表存储上图,并输出邻接表。(此题为选做)

三、【实验源代码】

🍻 CPP版

#include<iostream>
using namespace std;

const int MAX_N = 6;
const int MAX_M = 6 * 5;

int g[MAX_N][MAX_N]; // 邻接矩阵
int h[MAX_N], e[MAX_M], w[MAX_M], ne[MAX_M]; // 邻接表
int n = 6, m = 0, idx = 0; // n为节点数,m为边数,idx为邻接表中下一条边的索引

void add(int a, int b, int c)
{
	// 邻接矩阵加边
	g[a][b] = c;
	
	// 邻接表加边 (头插法)
	e[idx] = b; // b表示当前边的终点
	w[idx] = c; // c表示当前边的权值
	ne[idx] = h[a]; // h[a]表示节点a的第一条边在邻接表中的位置,ne[idx]表示a节点的下一条边在邻接表中的位置
	h[a] = idx++; // 更新节点a的第一条边的位置
}

void init()
{
	// A B C D E F
	// 0 1 2 3 4 5
	
	// 初始化邻接表的头结点
	for (int i = 0; i < n; i++)
		h[i] = -1;
	
	// 加边
	add(1, 0, 2);
	add(2, 1, 15);
	add(0, 2, 5);
	add(0, 3, 30);
	add(2, 5, 7);
	add(1, 4, 8);
	add(4, 3, 4);
	add(5, 3, 10);
	add(5, 4, 18);
}

void print()
{
	// 输出邻接矩阵
	cout << "输出邻接矩阵:" << endl;
	cout << "   A  B  C  D  E  F" << endl;
	char c = 'A';
	for (int i = 0; i < n; i++)
	{
		cout << c++ << "  ";
		for (int j = 0; j < n; j++)
			printf("%-2d ",g[i][j]);
//          cout << g[i][j] << " ";
		cout << endl;
	}
	
	// 输出邻接表
	cout << "\n	输出邻接表:" << endl;
	for (int i = 0; i < n; i++)
	{
		cout << (char)('A' + i); // 输出当前节点的名称
		int x = h[i]; // 获取当前节点的第一条边在邻接表中的位置
		while (x != -1)
		{
			cout << " --[" << w[x] << "]--> " << (char)('A' + e[x]); // 输出当前边的权值和终点
			x = ne[x]; // 移动到下一条边
		}
		cout << endl;
	}
}

int main()
{
	n = 6; // 设置节点数为6
	char nodes[] = { 'A', 'B', 'C', 'D', 'E', 'F' }; // 节点名称
	
	init(); // 初始化图
	print(); // 输出邻接矩阵和邻接表
	
	return 0;
}

🍻 c 语言版

#include <stdio.h>

#define MAX_N 6
#define MAX_M (6 * 5)

int g[MAX_N][MAX_N]; // 邻接矩阵
int h[MAX_N], e[MAX_M], w[MAX_M], ne[MAX_M]; // 邻接表
int n = 6, m = 0, idx = 0; // n为节点数,m为边数,idx为邻接表中下一条边的索引

void add(int a, int b, int c)
{
    // 邻接矩阵加边
    g[a][b] = c;

    // 邻接表加边 (头插法)
    e[idx] = b; // b表示当前边的终点
    w[idx] = c; // c表示当前边的权值
    ne[idx] = h[a]; // h[a]表示节点a的第一条边在邻接表中的位置,ne[idx]表示a节点的下一条边在邻接表中的位置
    h[a] = idx++; // 更新节点a的第一条边的位置
}

void init()
{
    // A B C D E F
    // 0 1 2 3 4 5

    // 初始化邻接表的头结点
    for (int i = 0; i < n; i++)
        h[i] = -1;

    // 加边
    add(1, 0, 2);
    add(2, 1, 15);
    add(0, 2, 5);
    add(0, 3, 30);
    add(2, 5, 7);
    add(1, 4, 8);
    add(4, 3, 4);
    add(5, 3, 10);
    add(5, 4, 18);
}

void print()
{
    // 输出邻接矩阵
    printf("输出邻接矩阵:\n");
    printf("   A  B  C  D  E  F\n");
    char c = 'A';
    for (int i = 0; i < n; i++)
    {
        printf("%c  ", c++);
        for (int j = 0; j < n; j++)
            printf("%-2d ", g[i][j]);
        printf("\n");
    }

    // 输出邻接表
    printf("\n	输出邻接表:\n");
    for (int i = 0; i < n; i++)
    {
        printf("%c", (char)('A' + i)); // 输出当前节点的名称
        int x = h[i]; // 获取当前节点的第一条边在邻接表中的位置
        while (x != -1)
        {
            printf(" --[%d]--> %c", w[x], (char)('A' + e[x])); // 输出当前边的权值和终点
            x = ne[x]; // 移动到下一条边
        }
        printf("\n");
    }
}

int main()
{
    n = 6; // 设置节点数为6
    char nodes[] = { 'A', 'B', 'C', 'D', 'E', 'F' }; // 节点名称

    init(); // 初始化图
    print(); // 输出邻接矩阵和邻接表

    return 0;
}

🍻 java版

package 数据结构实验;

public class 图的创建和存储
{
	static int[][] g;// (邻接矩阵)
	static int n = 6, m = 6 * 5, idx = 0;
	static int[] h = new int[n];
	static int[] e = new int[m];
	static int[] w = new int[m];
	static int[] ne = new int[m];

	static void add(int a, int b, int c)
	{
//		邻接矩阵加边
		g[a][b] = c;
//		邻接表加边 (头插法)
		e[idx] = b;
		ne[idx] = h[a];
		w[idx] = c;
		h[a] = idx++;
	}

	static void init()
	{
//		A B C D E F
//		0 1 2 3 4 5
//		初始化邻接表的头结点
		for (int i = 0; i < n; i++)
			h[i] = -1;

//		加边
		add(1, 0, 2);
		add(2, 1, 15);
		add(0, 2, 5);
		add(0, 3, 30);
		add(2, 5, 7);
		add(1, 4, 8);
		add(4, 3, 4);
		add(5, 3, 10);
		add(5, 4, 18);
	}

	static void print()
	{
//		输出邻接矩阵
		System.out.println("输出邻接矩阵:");
		// 表头
		System.out.println("   A  B  C  D  E  F");
		char c = 'A';
		for (int i = 0; i < n; i++)
		{
			System.out.print(c++ + "  ");
			for (int j = 0; j < n; j++)
				System.out.printf("%-2d ", g[i][j]);
			System.out.println();
		}
//		输出邻接表
		System.out.println("\n输出邻接表:");
		for (int i = 0; i < n; i++)
		{
			System.out.print((char) ('A' + i));
			int x = h[i];
			while (x != -1)
			{
				System.out.print(" --" + w[x] + "--> " + (char) ('A' + e[x]));
				x = ne[x];
			}
			System.out.println();
		}
	}

	public static void main(String[] args)
	{
		n = 6;
		char[] nodes = { 'A', 'B', 'C', 'D', 'E', 'F' };
		g = new int[n][n];
		init();
		print();

	}
}

四、【实验结果】

在这里插入图片描述

五、【实验总结】

balabala

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

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

相关文章

【STM32】新建工程

学习来源&#xff1a;[2-2] 新建工程_哔哩哔哩_bilibili 目前STM32的开发主要有基于寄存器的开发方式、基于标准库也就是库函数的方式和基于HAL库的方式。本学习是基于库函数的方式。&#xff08;各种资料去百度云下载&#xff09; 1 建立工程文件夹 Keil中新建工程&#xf…

高性能Mysql第三版学习(一)

学习目标&#xff1a; 高性能Mysql第3版 学习内容&#xff1a; MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 学习时间&#xff1a; 周一至周五晚上 9点—晚上10点周六晚上9点-10点周日晚上9 点-10点 学习…

公众号留言功能还有可能开放吗?

为什么公众号没有留言功能&#xff1f;2018年2月12日&#xff0c;TX新规出台&#xff1a;根据相关规定和平台规则要求&#xff0c;我们暂时调整留言功能开放规则&#xff0c;后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

初出茅庐的小李博客之C语言必备知识共用体

C语言必备知识共用体 共用体是一种构造数据类型&#xff0c;有时候也称之为联合体。 它的用途&#xff1a; 使几个不同类型的变量共占一段内存。 共用体举例 union 共用体名 { 类型标识符 成员名;类型标识符 成员名; };union data //共用体名字是data{ int i; …

面试题:什么是自旋锁?自旋的好处和后果是什么呢?

文章目录 什么是自旋自旋和非自旋的获取锁的流程 自旋锁的好处AtomicLong 的实现实现一个可重入的自旋锁示例自旋的缺点适用场景 什么是自旋 “自旋”可以理解为“自我旋转”&#xff0c;这里的“旋转”指“循环”&#xff0c;比如 while 循环或者 for 循环。“自旋”就是自己…

初学剪辑者找视频素材就上这6个网站

视频剪辑必备的6个素材网站&#xff0c;高清无水印&#xff0c;还可以免费下载&#xff0c;无版权限制&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要以设计类素材为主&#…

宝塔 Linux 面板安装一个高大上的论坛程序 —— Flarum

这个是很早搭建的版本,基于宝塔面板,比较复杂,如果想要简单的搭建方法,可以参看咕咕新写的这篇: 【好玩的 Docker 项目】10 分钟搭建一个高大上的论坛程序 购买腾讯云轻量应用服务器 待补充 登录服务器 待补充 BBR 加速脚本 BBR 加速脚本: BASH cd /usr/src &…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…

Chatbot开发三剑客:LLAMA、LangChain和Python

聊天机器人&#xff08;Chatbot&#xff09;开发是一项充满挑战的复杂任务&#xff0c;需要综合运用多种技术和工具。在这一领域中&#xff0c;LLAMA、LangChain和Python的联合形成了一个强大的组合&#xff0c;为Chatbot的设计和实现提供了卓越支持。 首先&#xff0c;LLAMA是…

蓝牙运动耳机哪个好?蓝牙运动耳机排行榜前十名

​在运动中&#xff0c;音乐可以激发你的热情和动力&#xff0c;而一款好的运动耳机则可以让你更好地享受音乐。然而&#xff0c;市面上的运动耳机品牌和型号众多&#xff0c;质量参差不齐。所以&#xff0c;今天精选了5款市面上比较优秀的运动耳机给大家参考&#xff0c;是你运…

【开源】基于JAVA的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

Vatee万腾的科技冒险:Vatee独特探索力量的数字化征程

在数字化时代的激流中&#xff0c;Vatee万腾以其独特的科技冒险精神&#xff0c;引领着一场前所未有的数字化征程。这不仅仅是一次冒险&#xff0c;更是对未知的深度探索&#xff0c;将科技的力量推向新的高度。 Vatee万腾在科技领域敢于挑战传统&#xff0c;积极探索未知的可能…

ThreeJs实现简单的动画

上一节实现可用鼠标控制相机的方式实现动态效果&#xff0c;但很多时候是需要场景自己产恒动态效果&#xff0c;而不是通过鼠标拖动&#xff0c;此时引入一个requestAnimationFrame方法&#xff0c;它实际上是通过定时任务的方式&#xff0c;每隔一点时间改变场景中内容后重新渲…

详解:什么是“智能合同管理”

未来已来&#xff0c;行业数字化进行的如火如荼&#xff0c;并逐步驶入深水区。合同是企业开展经营活动的重要文件&#xff0c;也是风险管控的核心地带&#xff0c;做好合同管理对企业运营效率的提升至关重要。近年来&#xff0c;合同管理已经跟随企业数字化的浪潮进入转型时期…

MySQL 及 SQL 注入

文章目录 前言什么是sql注入防止SQL注入Like语句中的注入后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现…

计算机体系结构概念总结

CH1 基本概念 课件补充 概念汇总 CH2 指令系统 课件补充 能够改变控制流的指令&#xff1a;分支、跳转、过程调用、过程返回 概念汇总 课后习题 CH3 流水线 课件补充 概念汇总 指令发射&#xff1a;指令从流水线的译码段进入执行段的过程称为指令发射。 向量处理机&#xf…

hdlbits系列verilog解答(exams/m2014_q4f)-47

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (input in1,input in2,output out);assign out in1 & (~in2);endmodule三、仿真结果 转载请注明出处&#xff01;

AI赋能数据表设计

数据表设计软件用过多种&#xff0c;用Ai 设计表几年Ai大模型爆发之后提升了新的高度 用navicat 设计表就是在跟团队的人介绍这次功能的表结构时&#xff0c;没办法看备注&#xff0c;只能看英文字段&#xff0c;导致在比较复杂的表中&#xff0c;总是在表结构和图形结构中来回…

【计网 可靠数据传输RDT】 中科大笔记 (十 一)

目录 0 引言1 RDT的原理RDT的原理&#xff1a; 2 RDT的机制与作用2.1 重要协议停等协议&#xff08;Stop-and-Wait&#xff09;:连续ARQ协议: 2.2 机制与作用实现机制&#xff1a;RDT的作用&#xff1a; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#x…

Leetcode—2824.统计和小于目标的下标对数目【简单】

2023每日刷题&#xff08;三十九&#xff09; Leetcode—2824.统计和小于目标的下标对数目 实现代码 class Solution { public:int countPairs(vector<int>& nums, int target) {int n nums.size();sort(nums.begin(), nums.end());int left 0, right left 1;i…