Skip to content

Алгоритм Дейкстры #3

@Alyasko

Description

@Alyasko

После долгих мучений, он получился) вопрос, как пользоваться memset, чтобы заполнить массив значением INF? #define INF 2000000

Код:

include

include

using namespace std;

define MAX 100

define INF 2000000

void dijkstra(int v);

int arr[MAX][MAX];
bool used[MAX];
int dist[MAX];

int n_e;
int n_v;
int start_v = 1;

int main()
{
cin >> n_v >> n_e;

memset(arr, 0, sizeof(arr));
memset(used, 0, sizeof(used));

for (int i = 0; i < MAX; i++)
    dist[i] = INF;

for (int i = 0; i < n_e; i++)
{
    int a, b, w;
    cin >> a >> b >> w;
    arr[a][b] = arr[b][a] = w;
}

dist[start_v] = 0;
dijkstra(start_v);

cout << endl;

for (int i = 1; i < n_v; i++)
    cout << start_v << " - " << i << ": " << dist[i] << endl;

getchar();
getchar();

return 0;

}

void dijkstra(int v)
{
used[v] = true;

int m = INF;
int m_v = -1;

for (int i = 1; i <= n_v; i++)
{
    if (!used[i])
    {
        if (arr[v][i] != 0)
            dist[i] = min(dist[v] + arr[v][i], dist[i]);

        if (dist[i] < m)
        {
            m = dist[i];
            m_v = i;
        }
    }
}

if (m_v > 0)
    dijkstra(m_v);

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions