《洛谷深入浅出基础篇》 图的基本应用

什么是图?

我们在生活中学习中能看见很多图,地图,路线图,思维导图等等,它们都有一个特点,

你从中任找一个点,你可以找到,从这个点出发,能够到达什么地方,也许不能到达任何地方。

以这个点为终点,有哪些点能到达这个点。

利用图,我们可以有方向地去到每一个点。也能找到去到这个点最短的方法。

图的建立:

下面建立一个简单的图,来描述一些图的基本术语

无向图:

在这副地图之中,每个建筑物被称作:顶点

每对建筑物之间连接的小路叫做:边

走这条边需要花费的时间叫做:边权

 像这样的,一条路可以让两座建筑的人互相通行,不具有方向性的图,叫做无向图。

在无向图中,每个顶点所连接的边数,叫做每个顶点的度数。

有向图:

像这样的,一条路只允许一种方向的人通过,如果要两座建筑物之间互相往来,那么需要再建立一条单向路。这样的图叫做有向图。 

如果两个顶点之间有不止一条边直接连接,就称为重边。

如果一条边的起点和终点是相同的,就称为自环。

图的存储

方法一:邻接矩阵(无重边)

也就是建立一个二维矩阵 v[i][j] 代表,以i为起点,j为终点,的边权,如果v[i][j]=0说明i到j没有直接的路相连。

缺点就是,将图存入的时候,用到二重循环,假设有n个顶点,我们需要o(n^2)的空间复杂度,,遍历的时候,也是o(n^2)的时间复杂度。

方法二:邻接表

邻接矩阵和邻接表的区别就是,邻接表只存放具有边的顶点。减少了不必要的存放次数。

下面是邻接表的实现:

1,建立一个结构体,里面有两个变量,to,cost

分别代表,终点,边权。

2.建立一个二维vector   ,    vector<int> p [maxn]

每当读入一条边的<起点u,终点v,边权l> 用  p[u] .push_back((edge){ v,l}) 

using namespace std;
const int MAXN = 1005;
struct place {int to, cost;
};
vector <place > p[MAXN];
int v[MAXN][MAXN];
int main()
{int n,m;cin >> n>>m;while (m--){int u, v, l;cin >> u >> v >> l;p[u].push_back({ v, l });}for (int i = 1; i <= n; i++) {for (int j = 0; j < p[i].size(); j++) {v[i][p[i][j].to] = p[i][j].cost;}}for(int i = 1; i <= n; i++){for (int j = 1; j <= n; j++)cout << v[i][j] << ' ';cout << endl;}
}

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

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

相关文章

9.docker镜像Tag为none的原因

1.现象 使用docker images命令查看镜像列表&#xff0c;会发现存在许多标签为none的镜像&#xff1a; 2. 原因 docker镜像标签为none的原因如下&#xff1a; &#xff08;1&#xff09;构建或重新拉取同名同Tag的新镜像&#xff1a;构建或重新拉取同名同Tag的新镜像后&…

斐波那契数列,剑指offer,力扣

目录 题目地址&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff08;动态规划&#xff09;&#xff1a; 代码实现&#xff1a; 补充说明&#xff1a; 代码&#xff08;优化&#xff09;&…

如何从零开始制作一本企业宣传画册?

最近公司领导要求为公司制作一本企业宣传画册&#xff0c;用来展示我们的产品和服务&#xff0c;增加品牌影响力。可是&#xff0c;像我这种零基础的小白&#xff0c;完全不知道如何制作啊&#xff1f;对此我感到很焦虑&#xff0c;怕做不好影响公司形象&#xff0c;也怕耽误时…

el-tree结合el-switch实现状态切换

<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…

数据结构与算法编程题5

从有序表中删除重复元素&#xff0c;使表中所有元素值均不相同。 #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_…

武汉凯迪正大KDHG-220P互感器综合测试仪

主要特点 武汉凯迪正大KDHG-220P互感器综合测试仪&#xff0c;仅需进行简单的数字设定&#xff1a;设定互感器的额定参数。仪器将全过程自动记录数据&#xff0c;并自动将变比极性、伏安特性曲线等计算并显示出来&#xff0c;省去换线、手动调压、人工记录、整理、描曲线等烦琐…

mysqlbinlog使用记录

首先要确认mysql启用了binlog功能。一般默认启用。 mysql> select log_bin; ----------- | log_bin | ----------- | 1 | ----------- 然后确认binlog目录 mysql> select log_bin_basename; ---------------------------- | log_bin_basename | -----…

文件加密软件哪个好丨2023年最值得收藏的6款文件加密软件

文件加密软件哪个好&#xff1f; 在这个安全事件频发的时代&#xff0c;信息安全、文件安全已成为很多人关注的话题。不管是电脑还是手机&#xff0c;都需要重视文件加密这个话题。 那今天就推荐6款最值得收藏的文件加密软件&#xff0c;并分析其中的优缺点。 一、电脑加密软…

【原创】CentOS7.9解决mdadm组raid阵列后resync非常慢的问题

前言 前几日我买了4块16TB的硬盘使用mdadm组了一个raid10阵列&#xff0c;具体如何搭建的可以看我之前的博客。 【报错记录】疯狂踩坑之RockyLinux创建Raid1镜像分区&#xff0c;Raid分区在重启后消失了&#xff01;外加华硕主板使用Raid模式后&#xff0c;硬盘在系统中无法找…

微信小程序配置企业微信的在线客服

配置企业微信后台 代码实现 <button tap"openCustomerServiceChat">打开企业微信客服</button>methods: {openCustomerServiceChat(){wx.openCustomerServiceChat({extInfo: {url: 你刚才的客服地址},corpId: 企业微信的id,showMessageCard: true,});} …

多域名SSL证书的优势

当今数字化时代&#xff0c;网站拥有一个或多个域名是非常常见的。多域名SSL证书在这样的情境下变得至关重要。它为拥有多个域名的网站提供了全面的安全性和灵活性&#xff0c;为其提供了诸多优势。 多域名SSL证书是一种单个证书&#xff0c;可以为一个域名、多个域名&#xff…

005 OpenCV直方图

目录 一、环境 二、直方图原理概述 三、代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、直方图原理概述 OpenCV是一个广泛使用的开源计算机视觉库&#xff0c;它提供了许多用于图像处理和分析的函数和算法。其中&#xff…