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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 11:00   #1
ганс
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 13
По умолчанию Нужно перевести из PASCAL В VISUAL C++.

Задача Дейкстра
Дан неориентированный граф.Для него вам необходимо найти кратчайшее расстояние от одной заданной вершины до другой.
Входные данные
В первой строке входного файла три числа: N,S,M и F (1<=N<=100;1<=S,F<=N), где N-кол-во вершин графа,M-кол-во рёбер,S-начальная вершина, а F-конечная. В следующих M строках заданы по 3 числа, номера вершин и расстояние между ними.
Выходные данные
Вывести искомое расстояние или -1, если пути между указанными вершинами не существует.

Код:
{$APPTYPE CONSOLE}
Const MaxN=100;
Big=MaxInt div  2;
Var N,Start<Finish,M,de:integer;
A:array[1..MaxN,1..MaxN] of integer;
D,p:array[0..MaxN] of integer;
Use:array[0..MaxN] of Boolean;
Procedure Print(v:integer);
Begin
If v>0 then Print(p[v]);
If v>0 then write(v,’’);
End;
Procedure deikstra(start:integer);
Var i,j,m:integer;
Begin
D[0]:=Big+1;
D[Start]:=0;
For i:=1 to N do Begin
m:=0
For j:=1 to N do
If (D[j]<D[m]) and not Use[J] Then m:=j;
Use[m]:=True;
For j:=1 to N do
If D[j]>A[m,j]+D[m] Then
Begin D[j]:=A[m,j]+D[m]; p[j]=m end;
End;
end;
Procedure Init;
Var i,j,k:integer;
Begin
Assign(Input,’Input.txt’); Reset(input);
Assign(Output,’output.txt’);Rewrite(Output);
Read(N,M,Start,Finish);
For i:=1 to N do
Begin
For j:=1 to N do if i=j then A[I,j]:=0 else A[i,j]:=Big;
D[i]=Big;// массив крадчайших расстояний от стартовой вершины
//до вершин с номером i
End;
For k:=1 to M do begin
Read(i,j,de);
End;
end;
begin
Init;
Deikstra(start);
If D[Finish]=Big Then Write(‘-1’)
Else
Begin
Writeln(D[Finish]);
Print(Finish);
End;
Close(Input);
Close(output);
End.
Задача2
Код:
//bfs breads-first search-ПОИСК ПЕРВОГО В ШИРИНУ
{@APPTYPE CONSOLE}
Type matr=Array[1..20,1..20] of integer; vek=Array[0..20] of byte;
Var  Och,p,color:vek; j,k,X,Y:integer; A:matr; m,n:integer;
Ok:Boolean;
Procedure Init;
Var I,j,l:integer;
Begin
Assign(Input,’Input.txt’); Reset(input);
Assign(Output,’output.txt’);Rewrite(Output);
Readln(n,m);
For l:=1 to m do
Begin readln(i,j);
A[I,j]:=1; A[j,i]=1;
End;
Readln(X,Y);
Close(input);
End;
Procedure bfs(v:integer);
Var I,j,L:byte;
Begin
For j:=1 to n do begin p[j]:=0; color[i]:=0 end;
i=1; k=1;
color[v]:=1; Och[k]:=v;
Repeat;
L:=Och[i];
For j:=1 to n do if (A[L,j]<>0) and (color[j]=0) then
Begin
Color[j]:=1; p[j]:=L; k:=k+1; Och[k]:=j;
End;
i:=i+1;
Until i>k;
End;
Procedure Print(v:integer);
Begin
If v>0 then Print(p[v]);
If v>0 then write(v,’’);
Enf;
Begin
Init;
bfs(X);
Print(Y);
Writeln;
End.

Последний раз редактировалось ACE Valery; 31.03.2012 в 16:55.
ганс вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно перевести программу из Turbo Pascal в Delphi Insensible Doll Помощь студентам 3 27.05.2010 13:41
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? iukash Visual C++ 8 17.04.2009 22:36