标签:des style blog http os width
Description
The forest is beautiful, and Jimmy wants to take a different route everyday. He also wants to get home before dark, so he always takes a path to make progress towards his house. He considers taking a path from A to B to be progress if there exists a route from B to his home that is shorter than any possible route from A. Calculate how many different routes through the forest Jimmy might take.
5 6 1 3 2 1 4 2 3 4 3 1 5 12 4 2 34 5 2 24 7 8 1 3 1 1 4 1 3 7 1 7 4 1 7 5 1 6 7 1 5 2 1 6 2 1 0
2 4
题意:Jimmy打算每天沿着一条不同的路走,而且,他只能沿着满足如下条件的道路(A,B):存在一条从B出发回家的路径,比所以从A出发回家的路径都短,你的任务是计算有多少条不同的路径
思路:所以求回家的最短路径,然后就是求满足dist[A]>dist[B]的所有的可能路径,通过dist[A]>dist[B]我们可以创建一个新图,则题目就是求从起点到终点的路径条数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN = 1010;
const int INF = 0x3f3f3f3f;
int dp[MAXN], dist[MAXN], cost[MAXN][MAXN];
int vis[MAXN];
int n, m, s, e, w;
void Dijkstra() {
int Min, cnt;
for (int i = 1; i <= n; i++)
dist[i] = cost[2][i];
vis[2] = 1;
for (int i = 1; i <= n; i++) {
Min = INF;
for (int j = 1; j <= n; j++)
if (!vis[j] && dist[j] < Min) {
Min = dist[j];
cnt = j;
}
vis[cnt] = 1;
if (Min == INF)
break;
for (int k = 1; k <= n; k++)
if (!vis[k] && dist[k] > dist[cnt]+cost[k][cnt])
dist[k] = dist[cnt] + cost[k][cnt];
}
}
int dfs(int cur) {
if (dp[cur] > 0)
return dp[cur];
int ans = 0;
for (int i = 1; i <= n; i++) {
if (dist[cur] > dist[i] && cost[cur][i] != INF)
ans += dfs(i);
}
return dp[cur] = ans;
}
int main() {
while (scanf("%d", &n) != EOF && n) {
scanf("%d", &m);
memset(cost, INF, sizeof(cost));
memset(dist, INF, sizeof(dist));
memset(vis, 0, sizeof(vis));
memset(dp, 0, sizeof(dp));
for (int i = 0; i <= n; i++)
cost[i][i] = 0;
for (int i = 0; i < m; i++) {
scanf("%d%d%d", &s, &e, &w);
cost[s][e] = cost[e][s] = w;
}
Dijkstra();
dp[2] = 1;
int ans = dfs(1);
printf("%d\n", ans);
}
return 0;
}UVA - 10917 Walk Through the Forest (最短路+DP),布布扣,bubuko.com
UVA - 10917 Walk Through the Forest (最短路+DP)
标签:des style blog http os width
原文地址:http://blog.csdn.net/u011345136/article/details/37990651