图论模型的建立
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常州市第一中学 林厚从
图论建模
例1、奇怪的电梯(LIFT.???) 问题描述: 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层 楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼 层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了 Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2 楼。那么,从A楼到B楼至少要按几次按钮呢?
常州市第一中学 林厚从
图论建模
主要程序段如下: for i:=1 to n do s[i]:=maxlongint; s[a]:=0;r:=[a];x:=1; while (s[b]=maxlongint)and(x<>0) do {宽度优先搜索} begin x:=0;r1:=[]; for i:=1 to n do if i in r then {求出上一层的顶点,进行枚举} begin if (i+k[i]<=n)and(s[i]+1<s[i+k[i]])then {如果可以向上乘电梯} begin x:=x+1; s[i+k[i]]:=s[i]+1; r1:=r1+[i+k[i]] end; if (i-k[i]>=0)and(s[i]+1<s[i-k[i]])then {如果能向下乘电梯} begin x:=x+1; s[i-k[i]]:=s[i]+1; r1:=r1+[i-k[i]] end; end; r:=r1 end; if s[b]<>maxlongint then writeln(s[b]) else writeln(-1); 常州市第一中学 林厚从
常州市第一中学 林厚从
图论建模
[问题分析] 1、问题的数据规模只有200,所以很容易想到用搜索, 由于要输出最优解(要求的是最快的次数),所以是宽搜。 2、对于A楼而言,实际上对它最多只能做2个操作, 上到A+X层或下到A-X层,当然前提是存在A+X或A-X层。显 然,如果把每一层楼看做一个顶点,如果A楼可以到B楼, 则从顶点A引一条到顶点B的边。对于样例,如下图: 这样一来,问题就变成了图论中的两顶点间最短路径 问题了!我们只要套用FLOYD算法等编程就可以了,当然 权要设为1。
[问题分析] 1、问题的数据规模只有200,所以很容易想到用搜索,由 于要输出最优解(要求的是最快的次数),所以是宽搜。 我们可以用一个集合记录上一层到达层,并用一个变量来 储存集合中的个数,当某次搜索后,该变量值为0,那么可见 以后的搜索也不会有新的层被加入,这就是输出“-1”的时候。 设:n是总层数,a是起始层,b是终止层, x是记录上层到达层数的个数; r,r1:set of 1..200; {记录上一次到达层的集合} k,s:array[1..200]of longint; {记录到达该层所需的次数}
输入:
输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二 行为N个用1个空格隔开的正整数,表示Ki。 输出: 输出文件仅一行,即最少按键次数,若无法到达,则输出-1。
样例输入:
5 1 5 3 3 1 2 5 样例输出:
3
常州市第一中学 林厚从
图论建模
图论建模
一般通过《数据结构》来学习图论,但它介绍的 往往只限于图论的基本要素、基本概念、相关理论、 经典算法等,至于如何建立图论模型,如何运用这些 理论、算法来研究图论问题,都只有靠自己理解和领 会,并通过大量实践来验证这些理解和感觉,通过摸 索、总结来提高。
常州市第一中学 林厚从Leabharlann Baidu
图论建模
在建立图论模型的过程中,常常会遇到一些困 难,例如难以建立顶点、边、权这些关系,或是原 型中的一些重要因素无法纳入现有模型,或是现有 模型虽然能表示原型,但却无法求解等等。但最困 难的还是很多题目拿到手后,无法想到要把问题转 化成图论模型来求解,是“想不到”而不是“做不 到”。为了克服这些困难,就需要用到某些独特的 思想、方法和技巧,多学习、多比较、多应用。
常州市第一中学 林厚从
图论建模
例2、渡河问题(river) 一个人带了一只狼、一只羊和一棵白菜想要过河,河上有一只独木船, 每次除了人以外,只能带一样东西。另外如果人不在旁边时狼就要吃羊,羊 就要吃白菜。问:应该怎样安排渡河,才能做到既把所有东西带过河,在河 上来回的次数又最少呢? [问题分析] 我们用变量M代表人、W代表狼、S代表羊、V代表白菜,∮代表空(什 么都没有)。开始时设人和所有东西都在左岸,这种情况用MWSV表示。 我们用一个集合表示目前左岸的情况,很明显,可能出现16种情况: [MWSV] [MWS] [MWV] [MSV] [WSV] [MW] [MS] [MV] [WS] [WV] [SV] [M] [W] [S] [V] [∮] 但要剔除掉6种可能发生狼吃羊和羊吃白菜的情况(红色),实际是10 种。下面我们就把这10种情况作为10个顶点,来构造一个无向图G,图G的边 按下列原则来定义:如果经过一次渡河,情况甲能变成情况乙,那么就在情 况甲与情况乙之间连一条边。得到下图:
图论建模
[问题分析] 1、问题的数据规模只有200,所以很容易想到用搜索, 由于要输出最优解(要求的是最快的次数),所以是宽搜。 2、对于A楼而言,实际上对它最多只能做2个操作, 上到A+X层或下到A-X层,当然前提是存在A+X或A-X层。显 然,如果把每一层楼看做一个顶点,如果A楼可以到B楼, 则从顶点A引一条到顶点B的边。对于样例,如下图:
常州市第一中学 林厚从
图论建模
图论模型和其它模型在研究方法上有着很大的 不同,例如可以运用典型的图论算法来对图论模型 进行求解,或是根据图论的基本理论来分析图论模 型的性质,这些特殊的算法和理论都是其它模型所 不具备的,而且在其它模型中,能用类似于图这种 直观的结构来描述的也很少。
常州市第一中学 林厚从
图论建模
图论建模是指对一些客观事物进行抽象、化简, 并利用图来描述事物特征及其内在联系的过程。建 立图论模型的目的和建立其它数学模型一样,都是 为了简化问题,突出要点,以便更深入地研究问题 的本质;它的求解目标可以是最优化问题,也可以 是存在性或构造性问题;并且和几何模型、运筹学 模型一样,在建立图论模型的过程中,也需要用到 集合、映射、函数等基本的数学概念和工具。