Dijkstra解怎么会内存超出限制呢?
查看原帖
Dijkstra解怎么会内存超出限制呢?
198766
Mokylin楼主2020/10/13 21:35
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>

#define INF 0x3f3f3f3f

int n, m, s;
int e[10005][10005];
int vis[10005];
int dist[10005];

void dijkstra(int startx)
{

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

    dist[startx] = 0;
    vis[startx] = 1;

    for (int i = 1; i <= n; i++)
    {
        int k, minNum = INF;
        for (int j = 1; j <= n; j++)
        {
            if (!vis[j] && dist[j] < minNum)
            {
                minNum = dist[j];
                k = j;
            }
        }

        vis[k] = 1;

        for (int j = 1; j <= n; j++)
        {
            if (!vis[j] && e[k][j] < INF)
            {
                if (dist[k]+e[k][j] < dist[j])
                {
                    dist[j] = dist[k]+e[k][j];
                }
            }
        }
    }
}

int main()
{
    int u, v, w;
    cin>>n>>m>>s;

    for (int i = 0; i <= n; i++)
    {
        dist[i] = INF;
        for (int j = 0; j <= n; j++)
        {
            e[i][j] = INF;
            e[j][i] = INF;
        }
    }

    for (int i = 0; i < m; i++)
    {
        cin>>u>>v>>w;
        e[u][v] = w;
    }

    dijkstra(s);

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

    return 0;
}

2020/10/13 21:35
加载中...