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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 23:27   #1
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию Прошу помогите!!!!!!пропадаю....

Доброе время суток уважаемые программисты....
Прошу у вас помощи...

Цель задания:
Реализовать алгоритм Дейкстры для нахождения кратчайшего пути в графе между заданными парами вершин...

Язык программирования:
Turbo Prolog или Lisp...

Контакты:
e-mail: sergey_avanesov@mail.ru

Заранее спасибо...
С уважением Сергей...
Allen Iverson вне форума
Старый 18.04.2009, 23:47   #2
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

ооо, это очень интересная тема по математическому моделированию )) когда решаешь вручную - это довольно легко, но когда попробовал написать её... кароч на паскале она у меня есть. если найду - вышлю
Life if about choices
Make the right choice
TaTT DoGG вне форума
Старый 19.04.2009, 09:59   #3
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Пытался записать как можно понятнее, поэтому такая здоровая получилась:
Код:
const Inf=High(longint);
      MaxCount=100;
type
Graf=array[1..MaxCount,1..MaxCount] of integer;

Vertex=record
 way:byte;          {Сюда записывается предыдущая вершина в крат. пути}
 len:integer;       {Сюда - длинна пути от первой вершины до данной}
 enabled:boolean;   {Если true, то вершина уже просчитана}
end;

Vertexes=record
 VGraf:Graf;
 Vert:array[1..MaxCount] of Vertex;
 v:integer;         {Текущая вершина}
 Count:byte;
end;

{ Чтение Графа из Файла}
procedure ReadGrafFromFile(var inp:text;var Vert:Vertexes);
var i,j:byte;
    X:integer;
begin
 read(inp,Vert.Count);
 for i:=1 to Vert.Count do
  for j:=1 to Vert.Count do
   read(inp,Vert.VGraf[i,j]);
end;

{Подготовка к поиску (обнуление и тп)}
procedure Prepare(var Vert:Vertexes;x1:byte);
var i:byte;
begin
 for i:=1 to Vert.Count do
  begin
   Vert.Vert[i].len:=Inf;
   Vert.Vert[i].enabled:=true;
  end;
 Vert.Vert[x1].way:=0;
 Vert.Vert[x1].len:=0;
 Vert.Vert[x1].enabled:=false;
 Vert.v:=x1;
end;

{Проставляет пути для всех вершин, смежных текущей (v)}
procedure DoSmegVert(var Vert:Vertexes);
var i:byte;
begin
 for i:=1 to Vert.Count do
  begin
   if Vert.VGraf[Vert.v,i]=0 then continue;
   if (Vert.Vert[i].enabled) and (Vert.Vert[i].Len>Vert.Vert[Vert.v].Len+Vert.VGraf[Vert.v,i]) then
    begin
     Vert.Vert[i].Len:=Vert.Vert[Vert.v].Len+Vert.VGraf[Vert.v,i];
     Vert.Vert[i].way:=Vert.v;
    end;
  end;
end;

{Ищет следущую вершину. (Мин. необработанная)}
function FindNextVert(var Vert:Vertexes):boolean;
var i:byte;
    wMin:integer;
begin
 Vert.v:=-1;
 wMin:=Inf;
 for i:=1 to Vert.Count do
  if (Vert.Vert[i].enabled) and (Vert.Vert[i].Len<wMin) then
   begin
    Vert.v:=i;
    wMin:=Vert.Vert[i].Len;
   end;
 if Vert.v=-1 then FindNextVert:=false
  else
   begin
    Vert.Vert[Vert.v].enabled:=false;
    FindNextVert:=true;
   end;
end;

{Процедура поиска}
function FindWay(var Vert:Vertexes;x1,x2:byte):boolean;
var b:boolean;
begin
 Prepare(Vert,x1);
 b:=true;
 while b do
  begin
   DoSmegVert(Vert);
   b:=FindNextVert(Vert);
   if Vert.v=x2 then b:=false;
  end;
 if Vert.v=-1 then FindWay:=false
  else FindWay:=true;
end;

{Процедура возвращает путь в уже просчитанной структуре}
function GenerateWay(Vert:Vertexes;x1,x2:byte):string;
var s,sp:string;
    u:byte;
begin
 str(x2,s);
 u:=x2;
 while u<>x1 do
  begin
   str(Vert.Vert[u].way,sp);
   s:=sp+' '+s;
   u:=Vert.Vert[u].way;
  end;
 GenerateWay:=s;
end;

var x1,x2:byte;
    Vert:Vertexes;
    inp:text;
begin
 assign(inp,'input.txt');
 reset(inp);
 read(inp,x1,x2);
 ReadGrafFromFile(inp,Vert);
 if FindWay(Vert,x1,x2) then
  begin
   writeln('OK))))');
   writeln(GenerateWay(Vert,x1,x2));
  end
 else
  writeln('No Way');
 readln;
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума
Старый 19.04.2009, 10:02   #4
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

пример входного файла input.txt:
1 3
5
0 3 0 4 0
3 0 0 0 3
0 0 0 0 2
4 0 0 0 1
0 3 2 1 0

означает поиск пути от 1й до 3й вершины. Размер графа 5. И далее сам граф.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума
Старый 19.04.2009, 11:11   #5
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию

спасибо тебе огромное!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!
Allen Iverson вне форума
Старый 19.04.2009, 11:15   #6
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию

может быть сможешь помочь и с вот этой?????
Написать программу, реализующую алгоритм Прима для по-строения кратчайшего остова заданного графа

заранее спасибо...
Allen Iverson вне форума
Старый 21.04.2009, 20:28   #7
Катерина_2000
Новичок
Джуниор
 
Аватар для Катерина_2000
 
Регистрация: 21.04.2009
Сообщений: 1
По умолчанию

Цитата:
Сообщение от TaTT DoGG Посмотреть сообщение
ооо, это очень интересная тема по математическому моделированию )) когда решаешь вручную - это довольно легко, но когда попробовал написать её... кароч на паскале она у меня есть. если найду - вышлю
можно мне?

22-03-91@mail.ru

Заранее спасибо)
Катерина_2000 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помогите!!!!Help... Ximer Паскаль, Turbo Pascal, PascalABC.NET 4 25.01.2009 10:35
ПОМОГИТЕ, ОЧЕНЬ ПРОШУ Help me Свободное общение 4 01.09.2008 09:29
прошу Помогите SPARTA Помощь студентам 3 02.07.2008 08:35