day 62 第十一章:图论part11 Floyd 算法精讲 A * 算法精讲 (A star算法) ...

打印 上一主题 下一主题

主题 647|帖子 647|积分 1941

使命日期:8.6
题目一链接:97. 小明逛公园 (kamacoder.com)
思路:
在这之前我们讲解过,dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化(SPFA) 都是单源最短路,即只能有一个起点。
而本题是多源最短路,即 求多个起点到多个终点的多条最短路径。
代码:
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. using namespace std;
  5. int main() {
  6.     int n, m, p1, p2, val;
  7.     cin >> n >> m;
  8.     vector<vector<vector<int>>> grid(n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1, 10005)));  // 因为边的最大距离是10^4
  9.     for(int i = 0; i < m; i++){
  10.         cin >> p1 >> p2 >> val;
  11.         grid[p1][p2][0] = val;
  12.         grid[p2][p1][0] = val; // 注意这里是双向图
  13.     }
  14.     // 开始 floyd
  15.     for (int k = 1; k <= n; k++) {
  16.         for (int i = 1; i <= n; i++) {
  17.             for (int j = 1; j <= n; j++) {
  18.                 grid[i][j][k] = min(grid[i][j][k-1], grid[i][k][k-1] + grid[k][j][k-1]);
  19.             }
  20.         }
  21.     }
  22.     // 输出结果
  23.     int z, start, end;
  24.     cin >> z;
  25.     while (z--) {
  26.         cin >> start >> end;
  27.         if (grid[start][end][n] == 10005) cout << -1 << endl;
  28.         else cout << grid[start][end][n] << endl;
  29.     }
  30. }
复制代码
难点:
解释细节1:



题目二链接:
思路:
代码:
难点:
解释细节1:



题目三链接:
思路:
代码:
难点:
解释细节1:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表