Автор работы: Пользователь скрыл имя, 05 Апреля 2010 в 12:57, Не определен
1. Введение…………………………………………………………….
2. Логико-функциональная модель алгоритма………………………
2.1. Теоретические сведения………………………………………...
2.2. Алгоритм Дейкстры……………………………………………..
2.3. Алгоритм Йена…………………………………………………..
3. Блок-схема алгоритма……………………………………………...
4. Анализ сложности алгоритма……………………………………...
4. Разработка программы……………………………………………..
4.1. Реализация алгоритма Дейкстры………………………………
4.2. Реализация алгоритма Йена…………………………………….
5. Заключение………………………………………………………….
for ($i = 0; $i < MAX_NODES; $i++)
{
$min = minDist($dist);
for ($j = 0; $j < MAX_NODES; $j++)
{
if ($dist[$min] + $matrix[$min][$j] < $dist[$j])
{
$dist[
$way[$
$way[$
}
if ($dist[$min] + $matrix[$j][$min] < $dist[$j])
{
$dist[
$way[$
$way[$
}
}
}
В
результате получаем массив минимальных
расстояний - $dist и двухмерный массив кратчайших
путей - $way.
5.2. Реализация алгоритма Йена
Для нахождения k кратчайших путей в графе используется рекурсивная функция findWays, которая в качестве параметров принимает матрицу данных, номера исходной и конечной вершин. Алгоритм этой функции таков: выполняется поиск одного кратчайшего пути графа, проверяется, есть ли найденный путь в массиве путей $ways и, если нет – сохраняем путь и в цикле убираем по одному ребру в найденном пути и вызываем функцию findWays, передавая ей уже обновленную матрицу данных:
function findWays($matrix, $start, $end)
{
global $ways;
$res = findShortestWay($matrix, $start, $end);
if ($res != null && !in_array($res, $ways))
{
$ways[] = array();
$ways[count(
$ways[count(
for ($i = 0; $i < count($res[1])-1; $i++)
{
$
$
$
findWa
}
}
}
Стоит заметить, что массив $ways является трехмерным – первый ключ соответствует номеру пути, второй указывает на а) длину пути б) массив вершин пути
После этого выполняется сортировка полученного массива $ways по возрастанию по длине пути.
for ($i = 0; $i < count($ways)-1; $i++)
{
for ($j = $i+1; $j < count($ways); $j++)
{
if ($ways[$i][0] > $ways[$j][0])
{
$buf = $ways[$i];
$ways[
$ways[
}
}
}
После возврата первых k элементов массива $ways наш алгоритм можно считать реализованным.
6. Заключение
Хотя поиск пути не тривиальная задача, существует несколько хороших, надежных алгоритмов, которые заслуживают большей известности в сообществе разработчиков.
Некоторые алгоритмы поиска пути не очень эффективны, но их изучение позволяет постепенно вводить концепции. Так можно понять, как решаются различные проблемы.