广度优先搜索训练题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广度优先搜索训练题

一、奇怪的电梯

源程序名LIFT.PAS

可执行文件名 LIFT.EXE

输入文件名 LIFT.IN

输出文件名 LIFT.OUT

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢?

输入

输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。

输出

输出文件仅一行,即最少按键次数,若无法到达,则输出-1。

样例

LIFT.IN

5 1 5

3 3 1 2 5

LIFT.OUT

3

二、字串变换

[问题描述]:

已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$

A2$ -> B2$

规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$、A2$ 可以变换为B2$ …。例如:A$='abcd' B$='xyz'

变换规则为:

‘abc’->‘xu’‘ud’->‘y’‘y’->‘yz’

则此时,A$ 可以经过一系列的变换变为 B$,其变换的过程为:‘abcd’->‘xud’->‘xy’->‘xyz’

共进行了三次变换,使得 A$ 变换为B$。

[输入]:

键盘输人文件名。文件格式如下:

A$ B$

A1$ B1$ \

A2$ B2$ |-> 变换规则

... ... /

所有字符串长度的上限为 20。[输出]:

输出至屏幕。格式如下:

若在 10 步(包含 10步)以内能将 A$ 变换为 B$ ,则输出最少的变换步数;否则输出"NO ANSWER!"[输入输出样例]

b.in:

abcd xyz

abc xu

ud y

y yz

屏幕显示:

3

三、网络传输问题

问题描述(提交文件:network.pas / network.exe)

在一个特殊的网络系统中有N台计算机,某个有关国家安全的信息需要在一个绝对安全的环境中从计算机1传递到计算机N。其中,我们规定以下安全策略:A:每台计算机都与某些计算机相连,且为无向连通。

B:某计算机α需要安全验证,而这些验证必须由计算机β上取得,但计算机β并不一定和计算机α相连。

C:该信息必须在经过计算机β时即取得计算机α的安全验证,则之后可以进入计算机α,否则不能进入计算机α。

D:信息只能在相邻的计算机之间传递,即使在取得β验证后也不能在α与β不相连的情况下直接到达α。

E:因为信息的重要程度,我们保证信息最终必能抵达计算机N。

由于网络传输需要时间,而每经过一台计算机消耗时间定为1,题目则要求求出传输该信息所需要的最短时间。

输入(INPUT.TXT):

第一行为N(N≤80)。之后的第2到第N+1行分别描述计算机1到N,每行第一个数字为计算机i需要的安全验证的来源计算机编号j,在1到N 之间,若为0则无需验证。之后紧跟着的是与计算机i相连的计算机的编号,一直读到该行结束。

输出(OUTPUT.TXT):

输出文件仅一行,为传递所需要的最短时间。

样例数据

四、过河(GDSOI-2000)

问题描述

农夫每天去种地都要过一条河,这条河很宽,过河要走上面的木桩。木桩有N去,排成一排,从左岸延伸到左岸,编号从1到N。左岸在1号桩的左边,右岸在N号桩的右边。但这些木桩会定时升降,因此,每天他都花不少时间在过河上。所以他想找一种最快过河的方法。

在时刻0,农夫在左岸,他要在最短时间内到达右岸。在任何时刻,每一去桩都只能处于升或降的其中一种状态。升起的桩才可以站上去,农夫只能站在升起的桩上或岸上。

每一支桩在时刻0都是降的状态,接着升起A分钟,降下B分钟,再升起A分钟后,再降下B分钟,这样一直交替升降下去。例如,A=2,B=3的桩,在时刻0降,时刻1、2升,在时刻3、4、5降,等等。A和B是常数时间。而且对于每一去桩都可能不同。

设在时刻T农夫站在P桩,那在时刻T+1,农夫能走到P桩左右5个桩上或岸上,也可以原地不动,当然桩要可站的。例如,在5号桩,他能走到1,2,3,4,5,6,7,8,9,10号桩,或到左岸。请帮农夫找一种能最快到达右岸的方法。

数据输入

从当然目录下的文本文件“river.dat”读入数据。

第一行是桩的数目N(5

数据输出

答案输出到当前目录下的文本文件“river.out”中。

只有一行,即最早到达右岸的时刻。当不可能到达右岸时,输出“NO”

输入输出样例

输入文件:river.dat

10

1 1

1 1

1 1

1 1

2 1

1 1

1 1

1 1

1 1

1 1

输出文件:river.out

4

五、造房子的学问

【问题描述】

小木屋看来已被荒置很多年了,Z4决定首先把它修葺一下,由最健壮的hongyan总负责。其余的人各自到到上去砍伐木材。

一些细微工作结束后,hongyan决定在木屋中加一条顶梁柱,但是其他人提供的木材长度参差不齐,幸运的是几何功底扎实的他,利用已有的工具造出了一把尺子。

hongyan首先选取了了一条最好的木材,然后他可以对这条木材作如下几种操作:1.接上分别由jakrinchose,立方,worm提供的木材(由于岛上资源丰富,这些木材是无限的),木材的长度会不损耗的增加。

2.用尺子在木材上截去该尺子长度的一段,当然截开后的两段木材依然可以利用。

3.把木材对半截断,木材长度变为原来的一半。

另外jakrinchose等提供用于拼接的木材由于质量一般(谁说的?!),不能直接使用为顶梁柱。

现在hongyan 想知道,通过这几种操作,是否能造出需要的长度的顶梁柱(当然他手中的“最好的木材”不能完全被截去,也就是说在操作的过程中不能把“最好的木材”完全扔掉以至长度为0!)假如可以,最少需要多少不工序?

【输入文件】

输入文件wood.in有5行,第一行两个数n,m(1<=n,m<=32767)分别表示该木材原来的长度,和需要的长度.第2至4行各一个数分别是jakrinchose,立方,worm提供用于拼接的木材长度L1,L2,L3(L1,L2,L3<=32767),最后一行也是一个数,表示尺子的长度L(L

(Z4是喜欢整数的人,所以所有的数据是整数,同时,对半截断的木材多出来的非整数部分,将作为多余的成分删去,也就是该操作后,木材的长度可以用div 2来运算;同时,任何时候,木材长度都不应大于32767)。

【输出文件】

输出文件wood.out仅一行,假如不能造出需要的长度,则输出“No solution.”否则输出最少需要的工序数。

【输入样例】

100 81

10

24

40

1

【输出样例】

3

(样例注解:3的结果是截出1,再加上两次40)

相关文档
最新文档