那帮我修改一下
时间: 2023-08-11 19:15:01 浏览: 40
好的,下面是修改后的代码:
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1000000;
const int INF = 0x3f3f3f3f;
struct Edge {
int to;
int w;
int next;
} edges[MAXN];
int head[MAXN];
int cnt = 0;
int n, m;
int dis[MAXN];
bool vis[MAXN];
void addEdge(int u, int v, int w) {
edges[cnt].to = v;
edges[cnt].w = w;
edges[cnt].next = head[u];
head[u] = cnt++;
}
void dijkstra(int start, int end) {
memset(vis, false, sizeof(bool) * (n+1));
memset(dis, INF, sizeof(int) * (n+2));
dis[start] = 0;
while (!vis[end]) {
int min_dis = INF, min_pos = -1;
for (int j = 1; j <= n; ++j) {
if (!vis[j] && dis[j] < min_dis) {
min_dis = dis[j];
min_pos = j;
}
}
if (min_pos == -1) return;
vis[min_pos] = true;
for (int k = head[min_pos]; k != -1; k = edges[k].next) {
int j = edges[k].to;
if (!vis[j] && dis[j] > dis[min_pos] + edges[k].w) {
dis[j] = dis[min_pos] + edges[k].w;
}
}
}
}
int main() {
int start, end;
memset(head, -1, sizeof(head));
cin >> n >> m >> start >> end;
if (n == 0) {
cout << "No path" << endl;
return 0;
}
for (int i = 1; i <= m; ++i) {
int u, v, w;
cin >> u >> v >> w;
addEdge(u, v, w);
addEdge(v, u, w);
}
dijkstra(start, end);
if (dis[end] == INF) {
cout << "No path" << endl;
} else {
cout << dis[end] << endl;
}
return 0;
}
```
修改的地方就是将 `memset(dis, INF, sizeof(int) * (n+1));` 改为了 `memset(dis, INF, sizeof(int) * (n+2));`。