HDOJ 2066 一个人的旅行 (Dijkstra)
2017-08-04 22:49
435 查看
不难,就是求最短路,我最后用优先队列处理了~
#include <cstring> #include <iostream> #include <queue> #define INF 0x3f3f3f3f #define N 1010 using namespace std; int map , dis ; int start , vis ; int dest , maxcity; void dijkstra(int s) { int ans, mind; memset(vis, 0, sizeof(vis)); for (int i = 1; i <= maxcity; i++) { map[i][i] = 0; dis[i] = map[s][i]; } vis[s] = 1; for (int i = 1; i < maxcity; i++) { mind = INF; for (int j = 1; j <= maxcity; j++) { if (!vis[j] && dis[j] < mind) { mind = dis[j]; ans = j; } } vis[ans] = 1; for (int j = 1; j <= maxcity; j++) { if (!vis[j] && dis[ans] + map[ans][j] < dis[j]) dis[j] = dis[ans] + map[ans][j]; } } } int main(void) { int T, S, D, p1, p2, r, temp; priority_queue<int, vector<int>, greater<int>> Q; while (~scanf("%d%d%d", &T, &S, &D)) { while (!Q.empty()) Q.pop(); maxcity = 0; memset(map, INF, sizeof(map)); for (int i = 1; i <= T; i++) { scanf("%d%d%d", &p1, &p2, &r); if (map[p1][p2] > r) { map[p1][p2] = r; map[p2][p1] = r; } temp = p1 > p2 ? p1 : p2; maxcity = temp > maxcity ? temp : maxcity; } for (int i = 1; i <= S; i++) scanf("%d", &start[i]); for (int i = 1; i <= D; i++) scanf("%d", &dest[i]); for (int i = 1; i <= S; i++) { dijkstra(start[i]); for (int j = 1; j <= D; j++) Q.push(dis[dest[j]]); } printf("%d\n", Q.top()); } return 0; }
相关文章推荐
- HDOJ 2066 一个人的旅行(最短路--dijkstra)
- hdoj-2066 一个人的旅行【最短路径--dijkstra&&spfa&&floyd】
- hdoj 2066 一个人的旅行(dijkstra)多源点多
- HDOJ 2066 一个人的旅行(dijkstra)
- hdoj 2066 一个人的旅行【dijkstra】
- HDOJ 2066 一个人的旅行 (Dijkstra)
- HDOJ 2066 一个人的旅行 (最短路 Dijkstra && SPFA)
- HDOJ 2066 一个人的旅行(Dijkstra)
- HDOJ 2066 一个人的旅行 (dijkstra 和 Floyd)
- HDOJ 2066 一个人的旅行(dijkstra)
- HDU 2066 一个人的旅行(Dijkstra)
- hdoj2066一个人的旅行
- hdu 2066 一个人的旅行(dijkstra)
- hdu 2066 一个人的旅行(dijkstra)
- HDOJ066 一个人的旅行(dijkstra)
- hdoj 2066 一个人的旅行 【dijstra】
- 杭电-2066 一个人的旅行(Floyd&&dijkstra)
- HDU 2066 一个人的旅行(Dijkstra模板题)
- 【hdu 2066】 一个人的旅行 ( 最短路 Dijkstra)
- hdoj_2066一个人的旅行