Задача по алгоритму дейсктера(СИ)
Застрял на решении задания по си:
Имеется N населенных пунктов , пронумерованных от 1 до N. Некоторые пары пунктов соединены дорогами. вывести самый короткий путь из L-го пункта в M-й. Информация о дорогах задается в виде последовательности пар чисел i и j (i < j), указывающих, что i-й и j-й пункты соединены дорогой, признак конца этой последовательности - пара нулей.
Подскажете, в каком моменте я начал ошибаться?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define MAX 100
int n;
int adj[MAX][MAX];
int d[MAX];
int used[MAX];
void dijkstra(int s)
{
for (int i = 1; i <= n; i++)
{
d[i] = -1;
used[i] = 0;
}
d[s] = 0;
while (1)
{
int v = -1;
for (int i = 1; i <= n; i++)
{
if (!used[i] && d[i] != -1)
{
if (v == -1 || d[v] > d[i])
{
v = i;
}
}
}
if (v == -1)
{
break;
}
used[v] = 1;
for (int i = 1; i <= n; i++)
{
if (adj[v][i] != -1 && (d[i] == -1 || d[i] > d[v] + adj[v][i]))
{
d[i] = d[v] + adj[v][i];
}
}
}
}
int main()
{
setlocale(LC_ALL, "Rus");
int l, m;
printf("Введите количество населенных пунктов: ");
scanf_s("%d", &n);
printf("Введите информацию о дорогах:\n");
while (1)
{
int i, j;
scanf_s("%d %d", &i, &j);
if (i == 0 && j == 0)
{
break;
}
adj[i][j] = adj[j][i] = 1;
}
printf("Введите номер начального пункта: ");
scanf_s("%d", &l);
printf("Введите номер конечного пункта: ");
scanf_s("%d", &m);
dijkstra(l);
printf("Самый короткий путь из пункта %d в пункт %d равен %d\n", l, m, d[m]);
return 0;
}