图论加边算法

很多图论的算法都有一个函数

struct Edge {
    int to;
    int w;
    int next;
} edge[N * 2];

int cnt_edge = 0;

void add_edge(int from, int to, int w)
{
    edge[cnt_edge].to = to;
    edge[cnt_edge].w = w;
    edge[cnt_edge].next = head[from];
    head[from] = cnt_edge++;
}

memset(head, -1, sizeof head);

我纠结了好久这个函数的意思……

实际上是用邻接表存一个图。

cnt_edge是给每一个边标号,从0开始。

edge[i].to 表示第i条边指向哪个点,edge[i].next表示第i条边的下一条边的序号。

head[from]表示以第from为初始结点的边的序号。

例如图(随便画的= =#):

存在边1,3   1,4   2,5   2,6   4,3   5,3  六条边

依次调用函数add_edge之后,可以得到

edge[0].to=3; edge[0].next=-1; head[1]=0;

edge[1].to=4; edge[1].next=0; head[1]=1;

edge[2].to=5; edge[2].next=-1; head[2]=2;

edge[3].to=6; edge[3].next=5; head[2]=3;

edge[4].to=3; edge[4].next=-1; head[4]=4;

edge[5].to=3; edge[5].next=-1; head[5]=5;

用图来表示就是:

喵。箭头的方向该怎么画呢。

时间: 2024-12-10 22:36:53

图论加边算法的相关文章

[掌眼]iOS / Android / java / node.js 通用的 AES256 加解密算法

example.m NSString *text = @"text"; NSString *key32 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding]; NSString *encryptedData = [[data AES256EncryptWithKey:key32] base64EncodedStringWi

数字加网(二)— —调幅加网算法及实现

在上一篇中提到调幅加网的方法有有理正切.无理正切和超细胞方法.无理正切方法,与有理正切本质相同,但是因为正切值为无理数,不能保证网格的角点与输出设备记录栅格的角点重合,需要进行一个强制重合的过程,一般数字加网方法里对其讨论较少.而超细胞的方法相当于外面一个大的阈值矩阵是有理正切,里面若干小的阈值矩阵是无理正切的.下图分别是有理正切和超细胞方法. 上段提到阈值矩阵,如下图,其实也可以叫做蒙板或者窗口,即在待加网的图像上"走"一圈下来(扫描整幅图像),当前像素值比阈值矩阵中相对应的值大,则

加解密算法

加解密算法概述 工作中经常用到加解密算法大概有以下三种: 单项散列算法 对称散列算法 非对称散列算法 单项散列算法 由不定长的数据转化为固定长的字符串,代表有: sha1 sha1($str[,raw_out=false]);//算法不够复杂 raw_out默认为false,生成一个32位的加密串 如果为true,则生成一个16位的二进制流 md5 md5($str[,strict=false]) strict默认为false,生成一个32位的加密串 如果为true,则生成一个16位的二进制流

数字加网(三)— —调频加网算法及实现

数字加网(一)- -概念及分色合成 数字加网(二)- -调幅加网算法及实现 数字加网(三)- -调频加网算法及实现 调频加网算法主要是抖动法与误差扩散法,前者又可以分为有序抖动和无序抖动,是点过程:后者是相邻过程. 有序抖动算法 Bayer抖动算法 算法公式 最具代表性的有序抖动算法,是1973年Bayer提出的Bayer算法,其递推公式如下: 令D1=0,n=2可以求出抖动矩阵 然后就可以继续推导出D4的抖动矩阵,推导过程如下 同理,我们可以推出D8的抖动矩阵 [注]一般处理采用D8的抖动矩阵

DES加解密算法Qt实现

算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为bengold1979的网友表示感谢!本文是对DES算法代码一文代码的具体描述.该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 图片及部分解析来自 http://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%9

【转】各种加解密算法比较

转自: http://blog.csdn.net/pengzp/article/details/6556674 二.          加密算法介绍 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合. 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高. AES(Advanced Encryption Standard

AES加解密算法Qt实现

[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外,图片及部分解析来自http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86.图1为个人劳动成果,请勿盗用此图. [简介] AES(Advanced Encryption Standard,

python实现的Caesar加解密算法

Caesar算法是最简单的加解密算法... # Caeser Cipher import sys,os MyCypher = 25 MyDict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz `[email protected]#$%^&*()_+[]\\;\',./{}|:"<>?' plaintext = 'Hello World!' cryptmsg = '' def encrypt(text, cyph

JavaScript与C#互通的DES加解密算法

原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密,得到原始数据,以起到一定的保密作用.但基于算法本身和密钥保密程度方面的考虑,使用本算法加密后的数据,其保密程度不是很高,故请酌情使用. 声明:本文中的JavaScript版的DES加解密算法来自于互联网,但为了方便于转化成C#版本的代码,本人对其进行了细微调整. JavaScri