DALAO求救!案例都不过,输出都0.00

P1744 采购特价商品

@[hcy_h20120621](/user/1211960) 有点像 Dijkstra 用错了 而且你这样精度转换有可能会出现精度问题( ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 101; const double INF = 1e9; struct Edge { int to; double weight; }; vector<Edge> adj[MAXN]; double dis[MAXN]; bool vis[MAXN]; int x[MAXN], y[MAXN]; double distance(int u, int v) { return sqrt((x[u] - x[v]) * (x[u] - x[v]) + (y[u] - y[v]) * (y[u] - y[v])); } int main() { int n, m, u, v, s, t; cin >> n; for (int i = 1; i <= n; i++) { cin >> x[i] >> y[i]; } cin >> m; for (int i = 0; i < m; i++) { cin >> u >> v; double w = distance(u, v); adj[u].push_back({v, w}); adj[v].push_back({u, w}); // Assuming the paths are bidirectional } cin >> s >> t; fill(dis, dis + MAXN, INF); dis[s] = 0.0; for (int i = 0; i < n; i++) { int k = -1; for (int j = 1; j <= n; j++) { if (!vis[j] && (k == -1 || dis[j] < dis[k])) { k = j; } } vis[k] = true; for (const auto& e : adj[k]) { if (!vis[e.to] && dis[k] + e.weight < dis[e.to]) { dis[e.to] = dis[k] + e.weight; } } } printf("%.2lf\n", dis[t]); return 0; } ```
by Zemu_Ooo @ 2024-01-13 19:46:46


昨天从哪抄了个 Dijkstra 模板,今天刚好看到你的帖子用上了(乐
by Zemu_Ooo @ 2024-01-13 19:47:47


@[Zemu_Ooo](/user/467824) 谢%%%
by hcy_h20120621 @ 2024-01-14 08:38:31


|