主页 > 手机  > 

代码随想录算法【Day61】

代码随想录算法【Day61】

97.小明逛公园

思路

通过 动态规划 迭代更新最短路径,每次增加一个中间点k,判断是否能通过k使i到j的距离更短。最终,在n轮迭代后,grid[start][end][n] 存储 start 到 end 的最短路径。若值为 10005(初始化的无穷大),表示两点不可达,输出 -1,否则输出最短路径长度。

代码

#include <iostream> #include <vector> #include <list> using namespace std; int main() { int n, m, p1, p2, val; cin >> n >> m; vector<vector<vector<int>>> grid(n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1, 10005))); for(int i = 0; i < m; i++){ cin >> p1 >> p2 >> val; grid[p1][p2][0] = val; grid[p2][p1][0] = val; } for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { grid[i][j][k] = min(grid[i][j][k-1], grid[i][k][k-1] + grid[k][j][k-1]); } } } int z, start, end; cin >> z; while (z--) { cin >> start >> end; if (grid[start][end][n] == 10005) cout << -1 << endl; else cout << grid[start][end][n] << endl; } }
标签:

代码随想录算法【Day61】由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“代码随想录算法【Day61】