最短路

作业介绍

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
int n,m,s;
int book[N],dis[N];
struct node {
    int v,w;
};
vector<node>e[N];
void dijkstra() {
    for (int i=1;i<=n;i++)dis[i] = 2147483647;
    dis[s] = 0;
    for (int i=1;i<n;i++) {
        int minn = 2147483647,id=0;
        for (int j=1;j<=n;j++) {
            if (dis[j]<minn && book[j]==0) {
                minn = dis[j];
                id = j;
            }
        }
        book[id] = 1;
        for (int i=0;i<e[id].size();i++) {
            int v = e[id][i].v;
            int w = e[id][i].w;
            if (dis[v]>dis[id]+w) {
                dis[v] = dis[id]+w;
            }
        }
    }
}
int main() {
    cin>>n>>m>>s;
    for (int i=1;i<=m;i++) {
        int x,y,z;
        cin>>x>>y>>z;
        e[x].push_back({y,z});
    }
    dijkstra();
    for (int i=1;i<=n;i++)cout<<dis[i]<<" ";
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 55005;
int n,m,s;
int dis[N],book[N];
struct node {
    int v,w;
};
vector<node>e[N];
void dijkstra() {
    for (int i=1;i<=n;i++)dis[i]=2147483647;
    dis[1] = 0;
    for (int i=1;i<n;i++) {
        int minn = 2147483647,id=0;
        for (int j=1;j<=n;j++) {
            if (dis[j]<minn && book[j]==0) {
                minn = dis[j];
                id = j;
            }
        }
        book[id] = 1;
        for (int i=0;i<e[id].size();i++) {
            int v = e[id][i].v;
            int w = e[id][i].w;
            if (dis[v]>dis[id]+w) {
                dis[v] = dis[id]+w;
            }
        }
    }
}
int main() {
    cin>>n>>m>>s;
    for (int i=1;i<=m;i++) {
        int x,y,z;
        cin>>x>>y>>z;
        e[x].push_back({y,z});
        e[y].push_back({x,z});
    }
    dijkstra();
    while (s--) {
        int x,y;
        cin>>x>>y;
        cout<<dis[x]+dis[y]<<endl;
    }
    return 0;
}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
5
开始时间
2026-9-13 0:00
截止时间
2026-9-21 23:59
可延期
24 小时