Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 21:25   #1
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию Алгоритмы на графах

Помогите пожалуйста сделать программу на Delphi, трудная задачка, не понимаю как делать-
Алгоритм нахождения расстояний от источника до всех вершин в бесконтурном графе:
Даны обозначения двух полей шахматной доски (например, a5 и c2). Найти минимальное число ходов, которые нужны шахматному коню для перехода с первого поля на второе.

Последний раз редактировалось Zaraaa; 24.02.2014 в 21:29.
Zaraaa вне форума Ответить с цитированием
Старый 25.02.2014, 07:59   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вот код, который решает эту задачу.. Вам осталось внести минимальные изменения..

Код:
var
        a : array [-1..40, -1..40] of Integer;
        n, x2, y2 : Integer;
 
procedure Wave(k : Integer);
var
        i, j : Integer;
begin
        if a[x2, y2] <> 0 then
                Exit;
 
        for i := 1 to n do
                for j := 1 to n do
                        if a[i, j] = k then begin
                                a[i, j] := 0;
                                if a[i-1, j-2] = 0 then
                                        a[i-1, j-2] := k+1;
                                if a[i+1, j-2] = 0 then
                                        a[i+1, j-2] := k+1;
 
                                if a[i-1, j+2] = 0 then
                                        a[i-1, j+2] := k+1;
                                if a[i+1, j+2] = 0 then
                                        a[i+1, j+2] := k+1;
 
 
                                if a[i-2, j+1] = 0 then
                                        a[i-2, j+1] := k+1;
                                if a[i-2, j-1] = 0 then
                                        a[i-2, j-1] := k+1;
 
                                if a[i+2, j+1] = 0 then
                                        a[i+2, j+1] := k+1;
                                if a[i+2, j-1] = 0 then
                                        a[i+2, j-1] := k+1;
 
 
                       end;
 
        Wave(k+1)
 
 
 
end;
 
var
 
        x1, y1, i, j : Integer;
 
begin
        Reset(input, 'input.txt');
        Assign(output, 'output.txt');
 
        ReadLn(n);
 
        ReadLn(x1, y1, x2, y2);
 
        for i := -1 to n+2 do
                for j := -1 to n+2 do
                        if (j < 1) or (i < 1) or (j > n) or (i > n) then
                                a[i][j] := -1
                        else
                                a[i][j] := 0;
 
 
 
        a[x1, y1] := 1;
        Wave(1);
 
        WriteLn(a[x2, y2]-1)
 
end.
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритмы на графах Evelin_18 Помощь студентам 0 27.02.2013 20:52
алгоритмы на графах С++ TNik Помощь студентам 0 27.05.2011 18:45
Алгоритмы на графах *stRong* Помощь студентам 3 22.05.2011 14:24
Алгоритмы на графах HoTTaBbl4 Помощь студентам 1 19.04.2011 22:43