给定一个公园中的 N 个景点(编号从 0 到 N−1),以及一个 N×N 的距离矩阵,矩阵中第 i 行第 j 列的元素表示景点 i 到景点 j 的距离,距离为 0 表示不相邻。还有一行标记哪些景点是公园的出入口(用 1 表示是,0 表示否)。最后给定一个入口景点编号 S 和一个出口景点编号 T。要求在允许经过任意其他景点但不需要访问所有景点的前提下,找到从 S 到 T 的最短游园线路,并输出具体经过的景点序列。如果存在多条等长最短路径,则输出按景点序号从小到大最小的那条路径。
某公园每年都会在新年时举办灯会,由于公园面积很大目各景点分散,希望你设计一条游园线路,从某个指定入口景点开始,到某个指定出口景点结束,使得游园总路程最短。最短路线不需要走完所有的景点,目中间允许经过其他出入口景点而不离开公园。
第一行:N,景点个数,景点序号从0开始,N−1结束。2<=N<=15
第二行至第N+1行:是一个N∗N的矩阵,表示各相邻景点之间的距离,距离为0表示不相邻。
第N+2行:该景点是否是公园出入口(1-是,0-否)。
第N+3行:要计算最短线路的入口景点序号和出口景点序号
所有用例的输入确保一定存在符合条件的线路,你无需考虑无解的情况。
具体游园线路,如果有多条符合条件的线路,按景点序号从小到大进行排序。
输入
3
0 2 4
2 0 3
4 3 0
1 0 1
0 2
输出
0 2
不难看出线路0−>2是最短的
输入
4
0 2 0 3
2 0 3 1
0 3 0 4
3 1 4 0
1 0 1 0
0 2
输出
0 1 2
不难看出符合要求的线路:
0−>1−>2,长度为5