Вы устанавливаете значение переменной VfMin
внутри блока if
. Если условие if
никогда не является true
, то ваш VfMin
остается неинициализированным. Вы можете установить VfMin
на значение по умолчанию. Это может быть примером (предполагая, что остальная часть алгоритма написана хорошо, этот код должен работать):
int main()
{
//This is the algorithm itself
int i, VfMin, j;
double dMin;
//Initializing the values
Init();
for (j = 1; j < n; j++)
{
dMin = INF;
VfMin = -1; // default value
for (i = 1; i <= n; i++)
{
if (!M[i] && dMin > d[i])
{
dMin = d[i];
VfMin = i;
}
}
if (VfMin != -1)
{
M[VfMin] = 1;
for (i = 1; i <= n; i++)
{
if (!M[i] && d[i] > dMin + C[VfMin][i])
{
pre[i] = VfMin;
d[i] = dMin + C[VfMin][i];
}
}
}
}
//Printing the results
Print();
return 0;
}
Также обратите внимание, что в C++
первый элемент и массив n
элементы имеют индекс 0
, а последний элемент - индекс n-1
.