#330. 机器人路径规划问题

机器人路径规划问题

题目描述

机器人Rob可在一个树状路径上自由移动。给定树状路径T\red {T}上的起点s\red {s} 和终点t\red {t},机器 人Rob要从s\red {s}运动到t\red {t}。树状路径T\red {T}上有若干可移动的障碍物。由于路径狭窄,任何时刻在 路径的任何位置不能同时容纳2\red {2 }个物体。每一步可以将障碍物或机器人移到相邻的空顶点 上。设计一个有效算法用最少移动次数使机器人从s\red {s}运动到t\red {t}。 编程任务: 对于给定的树T\red {T},以及障碍物在树T\red {T}中的分布情况。计算机器人从起点s\red {s} 到终点t\red {t}的最 少移动次数。

输入格式

由文件input.txt\red {input.txt}提供输入数据。文件的第1\red {1} 行有3\red {3}个正整数ns\red {n,s}t\red {t},分别表示树T\red {T}的 顶点数,起点s\red {s}的编号和终点t\red {t} 的编号。 接下来的n\red {n} 行分别对应于树T\red {T} 中编号为01n1\red {0,1,…,n-1} 的顶点。每行的第1\red {1} 个整数h\red {h} 表示顶点的初始状态,当h=1\red {h=1} 时表示该顶点为空顶点,当h=0\red {h=0} 时表示该顶点为满顶点,其 中已有1\red {1} 个障碍物。第2\red {2 }个数k\red {k}表示有k\red {k}个顶点与该顶点相连。接下来的k\red {k}个数是与该顶点 相连的顶点编号。

输出格式

程序运行结束时,将计算出的机器人最少移动次数输出到文件output.txt\red {output.txt} 中。如果无法 将机器人从起点移动到终点,输出“No solution!”

样例

输入样例

5 0 3
1 1 2
1 1 2
1 3 0 1 3
0 2 2 4
1 1 3

输出样例

3