问题描述:
机器人Rob可在一个树状路径上自由移动。给定树状路径T上的起点s 和终点t,机器
人Rob要从s运动到t。树状路径T上有若干可移动的障碍物。由于路径狭窄,任何时刻在路径的任何位置不能同时容纳2 个物体。每一步可以将障碍物或机器人移到相邻的空顶点
上。设计一个有效算法用最少移动次数使机器人从s运动到t。
编程任务:
对于给定的树T,以及障碍物在树T中的分布情况。计算机器人从起点s 到终点t的最
少移动次数。
数据输入:
由文件input.txt提供输入数据。文件的第1 行有3 个正整数n,s和t,分别表示树T的
顶点数,起点s的编号和终点t 的编号。
接下来的n 行分别对应于树T 中编号为0,1,…,n-1 的顶点。每行的第1 个整数h
表示顶点的初始状态,当h=1 时表示该顶点为空顶点,当h=0 时表示该顶点为满顶点,其
中已有1 个障碍物。第2 个数k表示有k个顶点与该顶点相连。接下来的k个数是与该顶点
相连的顶点编号。
结果输出:
程序运行结束时,将计算出的机器人最少移动次数输出到文件output.txt 中。如果无法
将机器人从起点移动到终点,输出“No solution!”。
输入示例 : 输出示例:
5 0 3 3
1 1 2
1 1 2
1 3 0 1 3
0 2 2 4
1 1 3
初步分析:
刚拿到题目时,感觉一点头绪也没有。想了很久,被迫上网百度,结果网上也没有解题报告,说这题是个经典难题,不会做。唯一可以确定的信息是这题是最小费用流。
好吧,虽然咱也是个菜鸟,但是也不能看到难题就怕是吧。所以对着屏幕想了N久,想出了一个自以为很漂亮的解法。
我是这样建模的,首先我认为这是一个树形的路径,所以起点和终点只有唯一的路线