题目大意是给你一个图。起点为1,终点为2 然后点a到点b是合法的判断(Notice 1:)是当b存在一个到终点的距离小于a到终点的最小距离,求从起点到终点的路径数。 |
Notice 1:不合法并非是断路,合法指回家的时候只按dis[b] < dis[a]的路线走、
dis[]表示到终点2的最短路径, 满足dis[b] < dis[a], 表示这样a->b的是可选择的。 就是说每次回家时选择从距起点(最短距离)近的点 向 距起点(最短距离)远的点走, 求这样的路线条数。
dp[i] = sum{ dp[j] | i->j邻接 && dp[j] > dp[i]};
//即邻接的两点(i,j)且 i->j 的路线是可行的,到 j 的路径数是其所以前驱点路径数之和
for (j = 1; j <= n; j++)
{
if (i->j 邻接 且 dis[j] > dis[i])
{
then i->j的路线是可选择的;
dp[i] += dp[j];
}
}