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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 00:20   #1
Дим@@
Пользователь
 
Регистрация: 20.10.2010
Сообщений: 12
По умолчанию Задача на графы

Задача вот в чём: даётся n точек и k пар точек между которыми есть соединение. Надо узнать можно ли попасть по этим соединениям из точки с номером s1 в точку с номером s2.

Пример ввода:
n k
s1 s2
создаётся n точек
b[1,1] b[1,2]
...
b[k,1] b[k,2]
Пример вывода:
Да/Нет

Пример ввода:
3 1
1 2
создаётся 3 точек
1 3
Пример вывода:
Нет

Пример ввода:
3 2
1 3
создаётся 3 точек
1 2
2 3
Пример вывода:
Да

Кому непонятна задача из-за корявого объяснения её сути спрашивайте.
Дим@@ вне форума Ответить с цитированием
Старый 21.10.2010, 00:41   #2
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

Дим@@ на вход вам подается матрица смежности? Покажите ваш код, постараемся найти ошибки
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 21.10.2010, 20:34   #3
Дим@@
Пользователь
 
Регистрация: 20.10.2010
Сообщений: 12
По умолчанию Задача на графы

Дело в том, что я не притставляю как её сделать, но мне говорили что это решение связано с алгоритмов флойда.

Последний раз редактировалось Дим@@; 21.10.2010 в 20:38.
Дим@@ вне форума Ответить с цитированием
Старый 21.10.2010, 23:59   #4
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Да много способов есть, чтобы решить эту задачу. Можно поиском в ширину. Можно поиском в глубину найти компоненты связности и проверить, принадлежат ли вершины s1 и s2 одной и той же компоненте...

Вот программа на Delphi поиска компонент связности с помощью системы непересекающихся множеств. Это решение твоей задачи, вход из входного файла, как там что записано, думаю, разберёшся.

Код:
program example;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  Source = 'input.txt';
  Nmax = 1000;

var
  M: Array[1..Nmax, 1..Nmax] of Integer;
  N: Integer;
  p: Array[1..Nmax] of Integer;

procedure Make_Set(const x: Integer);
begin
  p[x] := x;
end;

function Find_Set(const x: Integer): Integer;
begin
  Find_Set := p[x];
end;

procedure Union(const x, y: Integer);
var
  v: Integer;
begin
  for v := 1 to N do
    if Find_Set(v) = x then
      P[v] := y;
end;

procedure Connected_Components;
var
  u, v: Integer;
begin
  for v := 1 to N do
    Make_Set(v);
  for u := 1 to N do
    for v := 1 to N do
      if M[u, v] = 1 then
        if Find_Set(u) <> Find_Set(v) then
          Union(Find_Set(u), Find_Set(v));
end;

function Same_Components(const u, v: Integer): Boolean;
begin
  if Find_Set(u) = Find_Set(v) then
    Same_Components := True
  else
    Same_Components := False;
end;

var
  u, v: Integer;
  s1, s2: Integer;
begin
  Reset(Input, Source);
  FillChar(M, SizeOf(M), 0);
  ReadLn(s1, s2);
  ReadLn(N);
  while not EOF do
  begin
    ReadLn(u, v);
    M[u, v] := 1;
    M[v, u] := 1;
  end;
  Connected_Components;
  if Same_Components(s1, s2) then WriteLn('можно') else WriteLn('нельзя');
end.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 22.10.2010, 01:00   #5
Дим@@
Пользователь
 
Регистрация: 20.10.2010
Сообщений: 12
По умолчанию

Огромное спасибо за решение!
Дим@@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графы в С++ skiffter Помощь студентам 3 11.04.2010 10:40
Задача на графы типа лабиринт k1r1ch Паскаль, Turbo Pascal, PascalABC.NET 3 29.10.2009 21:07
Задача (на графы) Witaliy Помощь студентам 6 14.02.2009 17:47