邻接表终极解析===和vector写法的区别
参考:https://blog.csdn.net/deritt/article/details/50640997
先放写法,再看例子就懂了
首先我们需要定义一个数组 head[]
int head[maxn];
//head[i]表示节点i所连的最后一条边的编号(这里的最后指输入数据中最后加进来的边)
其次需要定义一个结构体来存贮边的信息
struct node{int v,w,next;
}edge[maxn*2];//此处的edge表示的是某一条边的信息
//edge[i].v表示编号为i的边是一条指向节点v的边
//edge[i].w表示编号为i的边所带有的权值
//edge[i].next
edge[i].next文字描述相当麻烦,用图表示如下
我们可以看到x,y,z为边的编号,u,v1,v2,v3为点的编号,那么
edge[z].next=y;
edge[y].next=x;
也就是说假如编号为i的边表示从一条从u指向v的边,那么edge[i].next就表示按加边顺序来说上一条从u发出的边
接下来要进行加边的操作【头插法】,理解头插法就明白邻接表写法的一大半了
int tot;void addedge(int ui,int vi,int wi)//表示建ui与vi之间的双向边
{//建从u指向v的边 edge[tot++].v=vi;edge[tot].w=wi;edge[tot].next=head[ui];head[ui]=tot;//建从v指向u的边 edge[tot++].v=ui;edge[tot].w=wi;edge[tot].next=head[vi];head[vi]=tot;
}
若要查询与节点x所连的所有节点(或边)那么
for (int i=head[x];i!=0;i=edge[i].next)int vv=edge[i].v;//vv为x所连的节点
若要遍历整个图则
int n,m,flag[maxn];
void dfs(int x)//遍历整个图
{for (int i=head[x];i!=0;i=edge[i].next){int vv=edge[i].v;if (flag[vv]!=1)//没被访问过 {flag[vv]=1; dfs(vv);}}
}
例子:
走一下过程,就明白了:(head初始为0)
A->D: edge[1]:【to=D,val=权值[忽略],next=0】 head[A]=1;
A->B: edge[2]: 【to=B,val=权值[忽略],next=1】 head[A]=2;
此时相遍历A的相邻节点:
for(int i=head[A];i;i=edge[i],next)
不就是i=head[A]=2;
i=edge[2].next=1【A->D】
i=edge[1].next=0 此时不满足for循环条件,退出循环
完事
邻接表终极解析===和vector写法的区别相关推荐
- 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星
一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...
- 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路
题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...
- dijkstra邻接表_[力扣743] 带权邻接表的单源最短路
题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...
- 链式前向星与邻接表对比
本文图片及数据 对于这样一张有向图: 输入边的顺序如下: 1 2 2 3 3 4 1 3 4 1 1 5 4 5 对于邻接表来说是这样的: 1 -> 2 -> 3 -> 5 2 -& ...
- 4003基于邻接表的新顶点的增加(C++,附详细解析)
描述 给定一个无向图,在此无向图中增加一个新顶点. 输入 多组数据,每组m+2行.第一行有两个数字n和m,代表有n个顶点和m条边.顶点编号为1到n.第二行到第m+1行每行有两个数字h和k,代表边依附的 ...
- 图的存储--邻接矩阵和邻接表(链表实现和用vector实现)
邻接矩阵: #include<iostream> #include<vector> #include<iomanip> #include<string> ...
- PTA 旅游规划(邻接表) 思路分析及代码解析
PTA 旅游规划_使用邻接表 思路分析及代码解析v1.0 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析(重点) ...
- 图的链式存储结构解析(邻接表、逆邻接表、十字链表、邻接多重表)
图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧).在边数较少的情况下比较浪费.我们这里来讨论图的链式存储结构. 图的链式结构主要有四类:邻接表.逆邻接表.十字链表.邻接 ...
- 链式前向星核心代码解析 ← 数组模拟邻接表
[知识点] 在图论算法实现中,常使用C++标准库STL自带的vector来模拟邻接表存图.详见: https://blog.csdn.net/hnjzsyjyj/article/details/101 ...
最新文章
- arm7 mysql 编译安装_uboot的readme导读(转)
- 带宽测量:pathload编译及运行
- getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...
- Linux 6.5选包截图
- 使用节点或Express返回JSON的正确方法
- css-使不同大小的图片在固定大小的容器中居中
- android SpannableString使用详解
- IOS之Core Foundation框架和Cocoa Foundation框架的区别
- AppLinks使用详解
- android 位移传感器 坐标,鼠标的工作原理及位移测量的实现方法
- matlab转换器dcdc,用 Simulink 设计 DC/DC 转换器
- webpack 图像压缩_基于webpack的图片压缩最佳方案
- 微软同步工具之synctoy
- 软文成功案例,给企业带来的价值不可限量
- 【Python讲义】WEEK 8
- 表示学习(特征学习)
- 网页轮播图(详细版)
- 前端和后端分别做什么?
- AI中的变形,扭曲和变化,栅格化命令,裁剪标记,路径,路径查找器,转化为形状
- untrusted Developer You can allow using these apps in settings you can allow using these apps i