909-2014-T3

文章目录

  • 1.原题
  • 2.算法思想
  • 3.关键代码
  • 4.完整代码
  • 5.运行结果

1.原题

有n个顶点的无向图,使用邻接矩阵作为存储结构。为减少存储空间,使用数组按照行主映射方式仅保存下三角矩阵。请给出映射公式,并编写算法计算给定顶点的度。叙述算法思想并用C++实现,说明算法的复杂性

2.算法思想

对于左下三角,直接用映射公式;对于右上三角,通过对称的特点转为左下三角,再用映射公式

3.关键代码

/*** @brief 压缩邻接矩阵为一维数组(左下三角)** 将二维邻接矩阵压缩为一维数组,仅存储左下三角部分的数据。** @param adjMatrix 二维数组表示的邻接矩阵* @param compressedMatrix 用于存储压缩后的矩阵的一维数组*/
void compressAdjacencyMatrix(int adjMatrix[NUM_VERTICES][NUM_VERTICES],int compressedMatrix[NUM_VERTICES * (NUM_VERTICES + 1) / 2]) {int index = 0;// 遍历二维矩阵的左下三角部分for (int i = 0; i < NUM_VERTICES; i++) {for (int j = 0; j <= i; j++) {// 将左下三角的数据压缩到一维数组中compressedMatrix[index] = adjMatrix[i][j];index++;}}
}/*** @brief 计算给定顶点的度(利用压缩矩阵)** 使用压缩的邻接矩阵计算给定顶点的度数。** @param vertex 给定顶点的索引* @param compressedMatrix 压缩后的矩阵,存储图的连接关系* @return int 给定顶点的度数*/
int calculateDegree(int vertex, int compressedMatrix[NUM_VERTICES * (NUM_VERTICES + 1) / 2]) {int degree = 0;// 遍历矩阵中与给定顶点相关的元素for (int i = 0; i < NUM_VERTICES; i++) {// i 大于 vertex 表示右上部分的矩阵if (i > vertex) {// 根据公式 i * (i + 1) / 2 + vertex 计算出压缩后的矩阵位置degree += compressedMatrix[i * (i + 1) / 2 + vertex];}// i 小于 vertex 表示左下部分的矩阵else if (i < vertex) {// 根据公式 vertex * (vertex + 1) / 2 + i 计算出压缩后的矩阵位置degree += compressedMatrix[vertex * (vertex + 1) / 2 + i];}}return degree;
}

4.完整代码

/*** @file main.c* @brief 实现了邻接矩阵及其操作。*/#include <stdio.h>#define NUM_VERTICES 6/*** @brief 压缩邻接矩阵为一维数组(左下三角)** 将二维邻接矩阵压缩为一维数组,仅存储左下三角部分的数据。** @param adjMatrix 二维数组表示的邻接矩阵* @param compressedMatrix 用于存储压缩后的矩阵的一维数组*/
void compressAdjacencyMatrix(int adjMatrix[NUM_VERTICES][NUM_VERTICES],int compressedMatrix[NUM_VERTICES * (NUM_VERTICES + 1) / 2]) {int index = 0;// 遍历二维矩阵的左下三角部分for (int i = 0; i < NUM_VERTICES; i++) {for (int j = 0; j <= i; j++) {// 将左下三角的数据压缩到一维数组中compressedMatrix[index] = adjMatrix[i][j];index++;}}
}/*** @brief 计算给定顶点的度(利用压缩矩阵)** 使用压缩的邻接矩阵计算给定顶点的度数。** @param vertex 给定顶点的索引* @param compressedMatrix 压缩后的矩阵,存储图的连接关系* @return int 给定顶点的度数*/
int calculateDegree(int vertex, int compressedMatrix[NUM_VERTICES * (NUM_VERTICES + 1) / 2]) {int degree = 0;// 遍历矩阵中与给定顶点相关的元素for (int i = 0; i < NUM_VERTICES; i++) {// i 大于 vertex 表示右上部分的矩阵if (i > vertex) {// 根据公式 i * (i + 1) / 2 + vertex 计算出压缩后的矩阵位置degree += compressedMatrix[i * (i + 1) / 2 + vertex];}// i 小于 vertex 表示左下部分的矩阵else if (i < vertex) {// 根据公式 vertex * (vertex + 1) / 2 + i 计算出压缩后的矩阵位置degree += compressedMatrix[vertex * (vertex + 1) / 2 + i];}}return degree;
}/*** @brief 打印邻接矩阵* @param adjMatrix 邻接矩阵*/
void printAdjacencyMatrix(int adjMatrix[NUM_VERTICES][NUM_VERTICES]) {for (int i = 0; i < NUM_VERTICES; i++) {for (int j = 0; j < NUM_VERTICES; j++) {printf("%d ", adjMatrix[i][j]);}printf("\n");}
}/*** @brief 主函数,用于测试邻接矩阵及其操作*/
int main() {int adjMatrix[NUM_VERTICES][NUM_VERTICES] = {{0, 1, 1, 0, 0, 0},{1, 0, 0, 1, 0, 0},{1, 0, 0, 1, 1, 0},{0, 1, 1, 0, 0, 1},{0, 0, 1, 0, 0, 1},{0, 0, 0, 1, 1, 0}};printf("Adjacency Matrix:\n");printAdjacencyMatrix(adjMatrix);int compressedMatrix[NUM_VERTICES * (NUM_VERTICES + 1) / 2];compressAdjacencyMatrix(adjMatrix, compressedMatrix);printf("Compressed Matrix:\n");for (int i = 0; i < NUM_VERTICES * (NUM_VERTICES + 1) / 2; i++) {printf("%d ", compressedMatrix[i]);}int vertex = 3; // 输入要计算度的顶点int degree;degree = calculateDegree(vertex - 1, compressedMatrix);printf("\nDegree of vertex %d is %d\n", vertex, degree);return 0;
}

5.运行结果

在这里插入图片描述

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

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

相关文章

软件测试面试题总结--基础面经

1 、软件的含义 程序、数据及相关文档的完整集合。 2、测试与调试的区别是什么&#xff1f; 测试是由测试人员来进行&#xff0c;主要目标是发现、报告和跟踪缺陷。 调试是由开发人员进行&#xff0c;主要目标是定位缺陷位置&#xff0c;分析缺陷原因&#xff0c;修复缺陷。…

vue年季度月联动筛选(el-cascader实现)

默认显示当年当季当月 <label class"font-weight">时间范围</label> <el-cascaderplaceholder"请选择":options"timeOption"filterableclearablechange-on-selectv-model"timeRange":props"{emitPath: true}&quo…

python 对图像进行聚类分析

import cv2 import numpy as np from sklearn.cluster import KMeans import time# 中文路径读取 def cv_imread(filePath, cv2_falgcv2.COLOR_BGR2RGB): cv_img cv2.imdecode(np.fromfile(filePath, dtypenp.uint8), cv2_falg) return cv_img# 自定义装饰器计算时间 def…

服务器 jupyter 文件名乱码问题

对于本台电脑&#xff0c;autodl服务器&#xff0c;上传中文文件时&#xff0c;从压缩包名到压缩包里的文件名先后会出现中文乱码的问题。 Xftp 首先是通过Xftp传输压缩包到Autodl服务器&#xff1a; 1、打开Xftp&#xff0c;进入软件主界面&#xff0c;点击右上角【文件】菜…

QTableView/QTableWidget设置单元格字体颜色及背景色

1.QTableView设置单元格字体颜色及背景色 QStandardItem * pItem new QStandardItem("AAA"); pItem->setBackground(QBrush(Qt::blue)); // 设置背景色 pItem->setForeground(QBrush(Qt::red)); // 设置字体颜色 2.QTableWidget设置单元格字…

Go语言中string与byte转换

简介 string与byte的转换是最常见的一种&#xff0c;通常我们会使用强转方式&#xff0c;但其实还有另一种更加高效的方式&#xff0c;本文会演示两种转换方式。 普通转换 func main() {fmt.Println([]byte("abcd"))fmt.Println(string([]byte{1, 2, 3})) }输出 […

Hadoop学习笔记:运行wordcount对文件字符串进行统计案例

文/朱季谦 我最近使用四台Centos虚拟机搭建了一套分布式hadoop环境&#xff0c;简单模拟了线上上的hadoop真实分布式集群&#xff0c;主要用于业余学习大数据相关体系。 其中&#xff0c;一台服务器作为NameNode&#xff0c;一台作为Secondary NameNode&#xff0c;剩下两台当…

(一)RISC-V 指令集及寄存器介绍

1. RISC-V指令集介绍 RISC-V 念作 “risk-five”&#xff0c;代表着 Berkeley 所研发的第五代精简指令集。 该项目 2010 年始于加州大学伯克利&#xff08;Berkeley&#xff09;分校&#xff0c;希望选择一款 ISA用于科研和教学。经过前期多年的研究和选型&#xff0c;最终决定…

【C++】string类的介绍与使用

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

通信原理板块——时分复用

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、基本概念 复用的目的是为了扩大…

Python批量备份交换机配置+自动巡检

自动巡检功能考虑到不同设备回显有所不同&#xff0c;需要大量正则匹配&#xff0c;暂时没时间搞这些&#xff0c;所以索性将命令回显全部显示&#xff0c;没做进一步的回显提取。 以下是程序运行示例&#xff1a;#自动备份配置&#xff1a; 备份完成后&#xff0c;将配置保存于…

Android加固为何重要?很多人不学

为什么要加固&#xff1f; APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换&#xff0c;包括不限于隐藏&#xff0c;混淆&#xff0c;加密等操作&#xff0c;进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果&#xff1a; 1.防篡改&#x…

visionOS空间计算实战开发教程Day 5 纹理和材质

在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体&#xff0c;但对这个立方体我们只配置了长宽高&#xff0c;并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆…

【shell脚本】全自动完成pxe无人值守批量装机脚本,匹配centos系列

本脚本采用的是搭建ftp服务器、tftp服务器、dhcp服务器来完成文件的传输 ks应答文件为最小化安装&#xff0c;免去图形化&#xff0c;可以实现一键装机~~ #!/bin/bash yum -y install tftp-server dhcp vsftpd syslinux &> /dev/null ###脚本说明&#xff1a;需要输入…

UE5的TimeLine的理解

一直以来&#xff0c;我对动画的理解一直是这样的&#xff1a; 所谓动画&#xff0c;就是可导致可视化内容变化的参数和时间的对应关系。 我不能说这个观点现在过时了&#xff0c;只能说自己狭隘了。因为UE的TimeLine的设计理念真让人竖大拇指。 当我第一次看到TimeLine节点的…

FreeSQL 基本使用

FreeSQL连接MySQL 安装 FeeSql相关库 FreeSql 基本库 FreeSql.DbContext FreeSql.Extensions.Linq linq语法扩展库 FreeSql.Provider.Mysql MySQL连接库 新建DbConent.cs public class Base{static string connstr "Data Source127.0.0.1;Port3306;User IDroot;Pa…

Ubuntu apt-get换源

一、参考资料 ubuntu16.04更换镜像源为阿里云镜像源 二、相关介绍 1. apt常用命令 sudo apt-get clean sudo apt-get update2. APT加速工具 轻量小巧的零配置 APT 加速工具&#xff1a;APT Proxy GitHub项目地址&#xff1a;apt-proxy 三、换源关键步骤 1. 更新阿里源 …

猫咪不长肉怎么回事?搬空家底的增肥效果好的猫罐头分享

秋冬到了&#xff0c;北方有供暖还好&#xff0c;咱南方的小猫咪全靠一身正气&#xff0c;不囤点脂肪天生怕冷的小猫咪要怎么过冬啊&#xff1f;咋吃都吃不胖的猫可愁怀铲屎官了&#xff0c;想想我新手养猫那些年&#xff0c;为了给我家猫养胖点我是做了不少努力&#xff0c;当…

地奥集团大健康产业再添解酒黑科技:“酒必妥”!

地奥集团成都药业股份有限公司隶属于地奥集团旗下的子公司&#xff0c;至今已经超过百年历史&#xff0c;主要围绕化学药品在耕耘奉献。尽管公司历来都低调&#xff0c;但是地奥这块牌子在质量把控&#xff0c;安全生产把控等药品领域还是响当当。历年来&#xff0c;公司持续对…

Vue3中el-table表格数据不显示

可能的原因和解决方法如下&#xff1a; 检查数据格式是否正确&#xff1a;确认数据是否传入了正确的格式&#xff0c;如数据是否为数组&#xff0c;每条数据是否包含必要的属性等。 检查 column 属性是否正确&#xff1a;确认 column 属性中的属性名是否与数据中的属性名一致&…