1 条题解
-
0
文字教学
这道题是无权无向图的多源最短路径问题,用反向BFS高效解决:
- 反向思考:因为要算所有点到N的最短距离,直接从N出发做一次BFS,就能一次性算出所有点的最短路径(边权为1时BFS天然求最短)。
- 建图:用邻接表存储无向图,每条边双向添加。
- BFS初始化:距离数组
dist初始化为-1(不可达),起点N的距离设为0并入队。 - 扩展过程:每次取出队首节点,遍历邻接点,若未访问则更新距离并入队。
- 输出:按顺序输出1到N-1的距离。
代码
#include <bits/stdc++.h> using namespace std; const int N = 105; vector<int> adj[N]; int dist[N]; queue<int> q; int main() { int n, m; cin >> n >> m; for (int i = 0; i < m; ++i) { int s, e; cin >> s >> e; adj[s].push_back(e); adj[e].push_back(s); } memset(dist, -1, sizeof(dist)); dist[n] = 0; q.push(n); while (!q.empty()) { int u = q.front(); q.pop(); for (int v : adj[u]) { if (dist[v] == -1) { dist[v] = dist[u] + 1; q.push(v); } } } for (int i = 1; i <= n-1; ++i) { cout << dist[i] << " "; } cout << endl; return 0; }
- 1
信息
- ID
- 11950
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
京公网安备 11011102002149号