@[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