萌新求教,c语言的方法全MLE
查看原帖
萌新求教,c语言的方法全MLE
397263
lizibing楼主2021/3/22 22:18
#include <iostream>
#include <algorithm>
#include <vector>
#define MAX 2147483
using namespace std;
void Dijkstra(vector<vector<int> > mise, int n, int s, vector<int> &dist);
int findmindist(vector<vector<int> > mise, int n, vector<int> dist, vector<int> collect);
int fun(int n, int mise[][n])
int main()
{
    int n, m, s;
    cin >> n >> m >> s;

    vector<vector<int> > mise(n + 1, vector<int>(n + 1, MAX));
    int l, r, len;
    for(int i = 0; i < m; i++)
    {
        cin >> l >> r >> len;
        if(l != r)
        {
            mise[l][r] = min(mise[l][r], len);
        }
    }

    vector<int> dist(n + 1, MAX);

    Dijkstra(mise, n, s, dist);

    for(int i = 1; i <= n; i++)
    {
        cout << dist[i] << " ";
    }

    return 0;
}

void Dijkstra(vector<vector<int> > mise, int n, int s, vector<int> &dist)
{
    vector<int> collect(n + 1, 0);
    for(int i = 1; i <= n; i++)
    {
        if(mise[s][i] != 0)
        {
            dist[i] = mise[s][i];
        }
    }

    dist[s] = 0;
    collect[s] = 1;

    while(1)
    {
        int temp = findmindist(mise, n, dist, collect);
        if(temp == -1)
        {
            break;
        }
        else
        {
            collect[temp] = 1;
            for(int i = 1; i <= n; i++)
            {
                if(mise[temp][i] != MAX && collect[i] == 0)
                {
                    if(dist[temp] + mise[temp][i] < dist[i])
                    {
                        dist[i] = dist[temp] + mise[temp][i];
                    }
                }
            }
        }
    }
}

int findmindist(vector<vector<int> > mise, int n, vector<int> dist, vector<int> collect)
{
    int mini = MAX;
    int result;
    for(int i = 1; i <= n; i++)
    {
        if(collect[i] == 0 && dist[i] < mini)
        {
            mini = dist[i];
            result = i;
        }
    }

    if(mini == MAX)
    {
        return -1;
    }
    else
    {
        return result;
    }
}

2021/3/22 22:18
加载中...