Обсуждение курса

как проверить граф на связность?

как проверить граф на связность?

от Илона Папава -
Количество ответов: 19
кто нить может привести пример как реализовать проверку графа н связность?
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илона Папава -
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илона Папава -
И вообще, Алексей не мог бы ты привести пример кода, где работает DFS, потому что ты дал просто процедуру а как именно и когда применять на задачах не показал. я например не знаю.
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илья Пересадин -
тут же на мссме есть про обход в глубину и где его применять, а проверить на связанность можно запустив из одной вершины дфс,а потом пройтись циклом по всем вершинам, и если есть непомеченная вершина, значит в графе несколько компонентов связанност значит он не связаный
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илона Папава -
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илья Пересадин -
смари
#include
#include
using namespace stg;

bool use[100]={false};
int n,a[100][100];
void dfs()
{
}//ну тут дфс

int main()
{
scanf("%d",&n);
int i,j;
bool yes=true;//делаем предположение что граф связаный
//считываем матрицу смежности
dfs(1);//запускаемся с любой вершины
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илья Пересадин -
там сверху инклюд iostream и инклюд cstdio
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илья Пересадин -
for (int i=1; i меньше или равно n && yes; i++)
if (!use[i]) yes=false;
и если yes тру то граф связаные,иначе нет
тут основывается на том,что если он связаные, то из любой вершины можно обойти все вершины,а если остались вершины в которызх мы не были, то значит он не связаный
return 0;
}
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илья Пересадин -
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илона Папава -

хм... примерно поняла. спасибо большое =)

В ответ на Илона Папава

Re: как проверить граф на связность?

от Илья Пересадин -
В ответ на Илья Пересадин

Re: как проверить граф на связность?

от Илона Папава -

#include<iostream>
using namespace std;
bool use[100]={false};
 int n,a[100][100];
 void dfs (int n)
 {
  use[n]=1;
  int v;
  for (v=0;v<n;v++)
   if (use[v]==0&&a[n][v]==1) dfs(v);
 }
 int main()
 {
  
 cin>>n;
  int i,j,q=0;
  bool yes=true;
  for (i=0;i<n;i++)
   for (j=0;j<n;j++)
   {
    cin>>a[i][j];
    if (a[i][j]==1) q++;
   }
   for (i=0;i<n;i++)
    if (!use[i]) dfs(i);
   for (i=0;i<n;i++)
if (!use[i]) {
 yes=false;
 break;

   if (yes &&q==n+1) cout<<"YES";
    else cout<<"NO";
    return 0;
 }

 вот мой код...тут как бы проверяется является ли граф деревом. ну туту обходом в глубуину проверяю на связность и еще одщно условие что количество ребер на 1 больше чем вершин. ну подскажите что не так? грубо не судите решаю с ДФС в первый раз. ВА2.*HELP*

В ответ на Илона Папава

Re: как проверить граф на связность?

от Илона Папава -

Кстати, Илья, я пробовала только от 1 вершины запускаться, он выводил мне бред. Мне Коля(Н.Окулов) сказал что надо запускаться от  всех непомеченных вершин. короч я хз..

В ответ на Илона Папава

Re: как проверить граф на связность?

от Илона Папава -
и еще кто нить может кинуть ссылку на НОРМАЛЬНУЮ теорию поиска компонента связности и скажите нормальным языком это че такое?!?!  прост на мссмне такая ерунда с векторами векторов и т.п :-) B-) 8-)
В ответ на Илона Папава

Re: как проверить граф на связность?

от Юрий Москаленко -
Если че то у дерева n-1 ребро) и то что ты делаешь это поиск количества компонентов связности (кол) а чтобы определить связность надо запуститься от 1(любой) вершины Как сказал Илья.
В ответ на Юрий Москаленко

Re: как проверить граф на связность?

от Илона Папава -
Вопрос с кодом снят. Там проблема была надо запускатьсчя от 0 вершины, и проблема была в том, что Алексей немного напутал в реализации ДФС))) получилось что я бежала по Н локальному а еще оно было в функции и корч там напуталось. А вот вопрос на нормальную ссылку нет))
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илона Папава -
то есть тот код грубо говоря подсчитывал количество кмпонент связности? то есть количество запусков равно количеству компонент свзяности?
В ответ на Илона Папава

Re: как проверить граф на связность?

от Илья Пересадин -
ну как тебе коля сказал, вот так подсчитывать компоненты связаности