其他分享
首页 > 其他分享> > 1003 Emergency(25 分)

1003 Emergency(25 分)

作者:互联网

1003 Emergency(25 分)

借鉴以下两博客:

https://blog.csdn.net/qq_41658889/article/details/82492985

****Dijkstra算法****https://blog.csdn.net/yalishadaa/article/details/55827681

#include<iostream>
using namespace std;

int main(){
    const int MAX = 0x7fffffff;
    int N, M, c1, c2;
    cin >> N >> M >> c1 >> c2;
    int graph[N][N], dist[N], citynum[N], vis[N] = {0};     //graph--地图,dist--距离,citynum--该城市救援人员,vis--标记
    for(int i = 0;i < N;i++){
        dist[i] = MAX;
        for(int j = 0;j < N;j++){
            graph[i][j] = -1;
        }
    }
    for(int i = 0;i < N;i++){
        cin >> citynum[i];
    }
    for(int i = 0;i < M;i++){
        int x, y, z;
        cin >> x >> y >> z;
        graph[x][y] = z;
        graph[y][x] = z;
    }
    
    if(N == 0){
        cout << "0 0"<<endl;
        return 0;
    }
    if( c1 == c2){
        cout << "1 " << citynum[c1] << endl;
        return 0;
    }
    
    //将出生地放入容器
    int rec[N][2] = {0};        //[可能的次数,最大救援人员]
    rec[c1][0] = 1;
    rec[c1][1] = citynum[c1];
    vis[c1] = 1;
    dist[c1] = 0;
    int cen = c1;
    while(1){
        //1.找到cen相邻的点
        for(int i = 0;i < N;i++){
            if(vis[i] == 0 && graph[cen][i] != -1){
                if(dist[i] > graph[cen][i] + dist[cen]){
                    dist[i] = graph[cen][i] + dist[cen];
                    rec[i][0] = rec[cen][0];
                    rec[i][1] = citynum[i] + rec[cen][1];
                }
                else if(dist[i] == graph[cen][i] + dist[cen]){
                    rec[i][0] += rec[cen][0];
                    rec[i][1] = rec[i][1] > rec[cen][1] + citynum[i]?rec[i][1] : rec[cen][1] + citynum[i];
                }
            }
        }
        //2.找下一个节点
        int MIN = MAX;
        for(int i = 0;i < N;i++){
            if(vis[i] == 0 && MIN > dist[i]){
                MIN = dist[i];
                cen = i;
            }
        }
        vis[cen] = 1;
        if(c2 == cen)break;
    }
    cout << rec[c2][0] << " " << rec[c2][1] << endl;
    return 0;
}

标签:25,dist,Emergency,int,cen,citynum,graph,rec,1003
来源: https://blog.csdn.net/weixin_49529683/article/details/118857690