Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
1

Задача на алгоритм Дейкстры

09.05.2012, 11:25. Показов 1390. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот задача http://informatics.mccme.ru/mo... rid=1737#1
алгоритм дейкстры знаю, но можете показать как тут уменьшать веса ребер по данному условию, разбор этого не говорит.
код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
var
j,i,R,r2,n,k:longint;
w,a:array[1..50,1..50] of longint;
p,d,mark,s1,s2,we:array[1..100] of longint;
wet:array[1..10] of string;
mi,nq,inf,l,st,s,uk,m,aa,bb,b,ans,x,x1,x2,x3,y1,y2,y3,nn,y,q1,z1,c:longint;
ch:char;
 
input,output:text;
 
function min(a,b:longint):longint;
begin
if a< b then min:=a else min:=b;
end;
begin
 
 {assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);}
{writeln (round(sqrt(2147483647)));}
inf:=30000;
read (n);
  st:=-1;
  for i:=1 to n do
    for j:=1 to n do
      begin a[i,j]:=st;w[i,j]:=st;end;
 
for i:=1 to n do
begin read (we[i]);d[i]:=inf;end;
 
read (m);
 
for i:=1 to m do
 begin
 read (k,l);a[k,l]:=1;a[l,k]:=1;w[k,l]:=we[k];w[l,k]:=we[l];
 end;
 
 
{tut ne znau chto delat}
for i:=1 to n do
 for j:=i+1 to n do
  if a[i,j]<>st then begin
                     for k:=j+1 to n do
                      if a[j,k]<>st then w[j,k]:=min(w[j,k],we[i]);
                     end;
 
 
{dijkstra}
d[1]:=0;
nq:=n;
while nq<>0 do
begin
  mi:=inf;
  for i:=1 to n do
   if (mark[i]=0)and(d[i]<mi) then begin uk:=i;mi:=d[i];end;
  dec(nq);
  mark[uk]:=1;
 
  for i:=1 to n do
    if (w[uk,i]<>st) then begin
                if d[i]>d[uk]+w[uk,i] then begin d[i]:=d[uk]+w[uk,i];p[i]:=uk;end;
                            end;
end;
 
 
{vivod}
if d[n]=inf then write ('-1') else writeln (d[n]);
 end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2012, 11:25
Ответы с готовыми решениями:

Алгоритм Дейкстры?
Добрый день, уважаемые форумчане. при изучении Java мне попалось задание, вот его текст: ...

Алгоритм Дейкстры
Всем доброго времени суток! Прошу помочь юному джуниору разобраться с алгоритмом дейкстры для...

Алгоритм Дейкстры на сетке
Здравствуйте! Подскажите, пожалуйста, применим ли алгоритм Дейкстры для нахождения расстояний от...

Алгоритм Дейкстры с выдачей маршрута
С большим трудом вник в саму суть алгоритма, сделать же выдачу маршрута не получается совсем. Дело...

9
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
13.05.2012, 23:36 2
Ты используешь неправильный подход. Необходимо брать по три города. A,B,C. А соединен с B B-C. Из A в С есть путь на которй требуется 2 канистры. Можно либо купить оба в а либо одно в а другое в Б. Получантся что вес ребра A-C равен минимальной сумме+оставляем графы А-B и B-C со стоимостью равной стоимости одной канистры в А и B соотеветсвенно. СТроим такой граф. Причем он должен быть не симетричным. Т.е. A-C может быть не равно C-A
0
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
14.05.2012, 09:24  [ТС] 3
как это реализовать? принцип я понял.что делать.если изменять веса в одном графе то вроде не получается, так как А-Б Б-С, строим А-С , что если использовать это ребро то получится неверно.в коде я пробовал менять в другом графе веса, но не получается, скажите в чем там ошибка?
0
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
14.05.2012, 23:05 4
Входные данные
4
1 10 2 15
4
1 2 1 3 4 2 4 3
У нас получается могут быть пути и веса
1-2-3(2),
1-2(1),
1-3(1),
3-2-1,(6)
2-1,(10)
3-1(2)
1-2-4,(2)
4-2-1,(25)
2-4,(10)
4-1,(15)
1-3-4,(2)
4-3-1,(17)
4-3,(15)
3-4(2). Строим граф. Применяем дейкстру. Получается оптимальный путь: (1-3-4) - с весом 2
0
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
14.05.2012, 23:39  [ТС] 5
если строить граф вашим методом
что было бы если тест такой
Входные данные
4
1000 10 2 15
4
1 2 1 3 4 2 4 3

строя по вашему алгоритму можно было бы добраться в 4 за 17 единиц Д-А-Б-С,как этого избежать?
0
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
15.05.2012, 00:07 6
Почему??? Мы начинаем с единицы. А не с Д)
0
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
15.05.2012, 01:13  [ТС] 7
подумайте почему мы должны делать новые ребра от всех вершин
тест
4
10000 10000 3 1500
4
1 2 1 3 3 2 1 4
что то вроде этого когда надо идти из вершины с большим номером.
0
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
15.05.2012, 01:15 8
Мы всегда начинаем 1 и заканчиваем N
0
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
15.05.2012, 07:59  [ТС] 9
можете ответить когда сдадите ее туда?
мы ДОЛЖНЫ учитывать все вершины при проходе
тест
4
10000 10000 3 1500
4
1 2 1 3 3 2 2 4
не поленитесь построить этот граф
0
-19 / 6 / 0
Регистрация: 09.10.2010
Сообщений: 41
15.05.2012, 16:50 10
Я на 11 тесте заваливаюсь
0
15.05.2012, 16:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2012, 16:50
Помогаю со студенческими работами здесь

Алгоритм Дейкстры для орграфа
Пусть G = (V, Е) - взвешенный ориентированный граф с весовой функцией w : Е -» {0,1,..., W}, где W...

Алгоритм Дейкстры - нахождение кратчайшего маршрута до каждой вершины
Привет. Понятно как находить кратчайший путь до каждой вершины из заданной. Непонятно как...

Алгоритм Дейкстры для получения всех перестановок по алфавиту
Где про него можно прочитать? Или может кто-нибудь объяснит? В поисках везде код на паскале, а мне...

Задача на алгоритм Дейкстры (как лучше хранить информацию?)
Доброго времени суток. Есть задача: Есть идея хранить входные данные след. образом: Выделить в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru