Я пытаюсь решить следующий вопрос, используя BackTracking в C, но я не знаю, как продолжить отсюда ...
Вопрос:
Крис планирует путешествовать по стране с N городами. Он получит помощь от матрицы NxN, в которой ячейка (I, J) представляет собой длину дороги от города I до города J. Длина дороги от города А до города В не одинакова по сравнению с дорогой из Город B - город A. Дорога Из того же исходного города обратно (напрямую) - 0. Крис заметил, что кратчайший путь от А до В не всегда прямой между двумя городами. Вам нужно будет помочь Крису найти кратчайший путь. Напишите функцию, которая проверяет самую короткую карту с учетом матрицы NxN, в которой хранятся значения длин дорог. Примечание: N определяется как 4.
Пример:
Кратчайший путь от 0 до 1 ведет к городу 0, затем 3, затем 1, если задана следующая матрица:
0 5 2 2
1 0 1 1
1 2 0 1
1 1 2 0
Ее мой код:
int ShortestPath (int SourceCity, int DestinationCity, int Distance [][N], bool Chosen[][N])
{
int Path=0;
if (SourceCity==DestinationCity)
{
Distance[SourceCity][DestinationCity]=true;
return 0;
}
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
{
Path += Distance[i][j];
if (!Chosen[i][j])
{
Chosen[i][j] = true;
ShortestPath(i, DestinationCity, Distance, Chosen);
}
}
}
if (Path>=Distance[SourceCity][DestinationCity])
{
Chosen[SourceCity,DestinationCity]=false;
return Distance[SourceCity][DestinationCity];
}
}
Примечание: выбранная матрица указала, выбрал я указанную c дорогу или нет (все ее начальные значения неверны)