2 条题解
-
0
询问chatGPT得到的Accepted答案
#include <iostream> #include <vector> #include <queue> using namespace std; const int INF = 0x3f3f3f3f; // 表示无穷大的值,即两个城市之间没有路 int main() { int n; cin >> n; vector<vector<int>> map(n, vector<int>(n)); // 表示城市之间距离的矩阵 for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> map[i][j]; vector<int> dist(n, INF); // dist[i]表示从1号城市到i号城市的最短距离 dist[0] = 0; priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq; // 小根堆,用来辅助Dijkstra算法 pq.push({0, 0}); // 将1号城市放入小根堆 while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d != dist[u]) continue; // 如果pq中取出的最短距离不是当前最短距离,则需要跳过 for (int v = u + 1; v < n; v++) // 对于所有比u大的城市v,更新dist[v] { if (map[u][v] != 0 && dist[u] + map[u][v] < dist[v]) // 如果有路相连,并且通过u可以更新dist[v] { dist[v] = dist[u] + map[u][v]; // 更新dist[v] pq.push({dist[v], v}); // 将v放入小根堆,用于后续处理 } } } cout << dist[n-1] << endl; // 输出最短距离 return 0; }
信息
- ID
- 529
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 56
- 已通过
- 14
- 上传者