提交时间:2025-05-27 14:39:40
运行 ID: 193900
#include <iostream> #include <vector> #include <queue> #include <climits> using namespace std; const int MAXN = 1501; vector<vector<pair<int, int>>> adj; vector<int> dist; void dijkstra(int src) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; pq.push({0, src}); dist[src] = 0; while (!pq.empty()) { int u = pq.top().second; pq.pop(); for (auto &edge : adj[u]) { int v = edge.first; int weight = edge.second; if (dist[u] + weight < dist[v]) { dist[v] = dist[u] + weight; pq.push({dist[v], v}); } } } } int main() { int n; cin >> n; adj.resize(n); dist.resize(n, INT_MAX); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { int weight; cin >> weight; if (i != j && weight != -1) { adj[i].push_back({j, weight}); } } } dijkstra(0); // 从A点(编号为0)开始 // 输出结果 for (int i = 1; i < n; ++i) { cout << dist[i] << endl; } return 0; }