标签:
这道题一开始我用dfs写了一次 = = 结果时间超限
对于这种最短路径的问题来讲,效率更高的肯定是Floyd算法和Dijkstra算法
单源最短路径最好自然是用Dijkstra,不过Floyd写起来简单,我就这样写咯
#include <iostream> #define INF 99999 using namespace std; int n, m, s, d; int map[500][500]; int price[500][500]; int main() { /*纯洁的初始化!*/ cin >> n >> m >> s >> d; for (int i = 0; i < 500; i++){ for (int j = 0; j < 500; j++){ map[i][j] = price[i][j] = INF; } } for (int i = 0; i < m; i++){ int w, x, y, z; cin >> x >> y >> z >> w; map[x][y] = map[y][x] = z; price[x][y] = price[y][x] = w; } // Floyd Algorithm for (int k = 0; k < n; k++){ for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ if (map[i][j] > map[i][k] + map[k][j]){ map[i][j] = map[i][k] + map[k][j]; price[i][j] = price[i][k] + price[k][j]; } else if (map[i][j] == map[i][k] + map[k][j]){ if (price[i][j] >price[i][k] + price[k][j]){ price[i][j] = price[i][k] + price[k][j]; } } } } } cout << map[s][d] << " " << price[s][d]; }
标签:
原文地址:http://www.cnblogs.com/zhouyiji/p/4570232.html