图论的基本算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析
理解问题的第一步就是认真“读题”。那么我们先来 看一看这个题目涉及的问题。研究一下题目中所给 的图的一些性质,可以发现如下特点:
1.图中所有的节点都有一个确定的等级,我们记作 Level(i)
2.图中所有的边都是有向的,并且从Level值为i-1 的节点指向Level值为i的节点
我们不妨将其抽象为“阶段图”。
邻接表
表节点 type arcptr=^arcnode; arcnode=record adjvex:vtxptr; nextarc:arcptr; info: … {和弧有关的其他信息} end; vex=Record vexdata: …{和顶点有关的其他信息} firstarc:arcptr; end;
更一般地,我们可以发现所有的阶段图都是有向无 环的,这样我Baidu Nhomakorabea可以通过拓扑排序来得到期望的处 理节点的顺序。
•A1 A6 A3 A7 A2 A8 A5 A10; •A1 A6 A3 A9 A4 A8 A5 A10.
图的矩阵表示
权矩阵
•无向图G的权矩阵A是一个对称矩阵.
关联矩阵
•若vi是ej的始点; •若vi是ej的终点; •若vi与ej不关联.
• 有向图的关联矩阵每列的元素中有且仅有一个1,有且仅有一 个 - 1.
•(0,1,0,1) (0,1,0,0) (0,0,1,0) (0,0,0,1) (0,0,0,0) •(1,0,1,0) (1,0,1,1) (1,1,0,1) (1,1,1,0) (1,1,1,1)
•河西=(人,狼,羊,菜) 河东=(人,狼,羊,菜)
•将10个顶点分别记为A1, A2, …, A10 ,则渡河问题化为在该 图中求一条从A1到A10的路. •从图中易得到两条路:
endF;
拓扑排序
核心问题:给一些序关系,排出全序!
一个一个排 先排最大 然后第二大… 具体实现?
每次取0出度点 枚举所有点吗? 0出度只可能是1出度变来的! O(n+m)
神经网络
在兰兰的模型中,神经网络就是一张有向图,图中的节点 称为神经元,而且两个神经元之间至多有一条边相连,下 图是一个神经元的例子:
•例如:对于有向图
•可求得拓扑有序序列: • ABCD 或 ACBD
•对于下列有向图
•B
•A
•D
•C
•不能求得它的拓扑有序序列。
•因为图中存在一个回路 {B, C, D}
求拓扑序列
FUNC toporder(var dig:adjlisttp):boolean; init(top2); m:=0; ve[1..n]:=0 while Not empty(top1) do [ j:=pop(top1); push(top2,j); m:=m+1; k:=firstadj(dig,j); while k<>0 do [ 入度(k):=入度(k)-1; if 入度(k)=0 then push(top1,k); if ve[j]+dut(<j,k>)>ve[k] then ve[k]:=ve[j]+dut(<j,k>); k:=nextadj(dig,j,k) ] ] if m<n then return(false) else return(true);
• 由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允 许的,从而对应状态(1,0,0,1), (1,1,0,0), (1,0,0,0)也是 不允许的.
• 以可允许的10个状态向量作为顶点,将可能互相 转移的状态用线段连接起来构成一个图.
• 根据此图便可找到渡河方法.
•(1,1,1,1) (1,1,1,0) (1,1,0,1) (1,0,1,1) (1,0,1,0) •(0,0,0,0) (0,0,0,1) (0,0,1,0) (0,1,0,0) (0,1,0,1)
• 图中,X1—X3是信息输入渠道,Y1-Y2是信息输出渠道 ,C1表示神经元目前的状态,Ui是阈值,可视为神经元的一 个内在参数。 • 神经元按一定的顺序排列,构成整个神经网络。在兰兰 的模型之中,神经网络中的神经无分为几层;称为输入层、 输出层,和若干个中间层。每层神经元只向下一层的神经元 输出信息,只从上一层神经元接受信息。
adjlist=array [vtxptr] of vexnode;
邻接表
•2
•3
•4 ^
•1
•3
•5 ^
•1
•2
•4
•5
•6 ^
•1
•3
•6 ^
•2
•3
•6 ^
•3
•4
•5 ^
拓扑排序
• 按照有向图给出的次序关系,将图中顶点排成一个 线性序列,对于有向图中没有限定次序关系的顶点,则 可以人为加上任意的次序关系。由此所得顶点的线性序 列称之为拓扑有序序列
神经网络
•兰兰规定,Ci服从公式:(其中n是网络中所有神经元的数目)
公式中的Wji(可能为负值)表示连接j号神经元和 i号神经 元的边的权值。当 Ci大于0时,该神经元处于兴奋状态,否 则就处于平静状态。当神经元处于兴奋状态时,下一秒它会 向其他神经元传送信号,信号的强度为Ci。 如此.在输入层 神经元被激发之后,整个网络系统就在信息传输的推动下进 行运作。现在,给定一个神经网络,及当前输入层神经元的 状态(Ci),要求你的程序运算出最后网络输出层的状态。 【输入格式】 第一行是两个整数n(1≤n≤20)和p。接下来n行,每行两个 整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入 层的神经元开始时状态必然为0。再下面P行,每行由两个整 数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij 。 【输出格式】 输出包含若干行,每行有两个整数,分别对应一个神经元的 编号,及其最后的状态,两个整数间以空格分隔。仅输出最 后状态非零的输出层神经元状态,并且按照编号由小到大顺 序输出! 若输出层的神经元最后状态均为 0,则输出 NULL。
图论的基本算法
过河
n 一摆渡人欲将一只狼,一头羊,一篮菜从河 西渡过河到河东.由于船小,一次只能带一 物过河,并且狼与羊,羊与菜不能独处.
n 给出渡河方法.
• 解:用四维0-1向量表示(人,狼,羊,菜)在河西岸的 状态(在河西岸则分量取1,否则取0),共有24 =16 种状态. 在河东岸的状态类似记作.