Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
1

графы. поиск в глубину

04.07.2013, 14:23. Показов 3566. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте. Вот такая задача
N шестеpенок пpонумеpованы от 1 до N (N ≤ 10). Заданы M (0 ≤ M ≤ 45) соединений паp шестеpенoк в виде (i, j), 1≤ i < j ≤ N (шестеpня с номеpом i находится в зацеплении с шестеpней j). Можно ли повеpнуть шестеpню с номеpом 1?
Если да, то найти количество шестеpен, пpишедших в движение.
Если нет, то тpебуется убpать минимальное число шестеpен так, чтобы в оставшейся системе пpи вpащении шестеpни 1 во вpащение пpишло бы максимальное число шестеpен. Указать номеpа убpанных шестеpен ( если такой набоp не один, то любой из них ) и количество шестеpен, пpишедших в движение.


помогите решить, хотя бы частично с поиском в глубину и соответственно проверкой вращения шестеренок(каждая шестеренка заставляет крутиться следующую в противоположную сторону, то есть при наличии нечетных циклов система встанет)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2013, 14:23
Ответы с готовыми решениями:

графы,поиск в глубину
очень нужна помощь!нужно в неориентированном графе найти компоненты связности поиском в глубину....

Графы. Поиск в глубину
Создать программу, которая реализует поиск пути между двумя произвольными вершинами графа согласно...

Поиск в глубину. Графы. С++
Задана ,допустим, такая матрица смежности 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1...

Графы: как можно использовать обход в глубину?
Прочитал про обход графа в глубину, посмотрел реализацию, и тут вопрос а как можно использовать...

11
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
04.07.2013, 15:46 2
на алголисте посмотрите алгоритмы.
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
04.07.2013, 16:11  [ТС] 3
Kukurudza, там к сожалению только в чистом виде поиск в глубину, а мне нужно чтобы можно было дважды проходить по вершинам
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
04.07.2013, 19:05 4
хорошая задачка. подумайте, когда можно ее повернуть, а когда нет. это забавно)
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 19:07 5
ух у меня щяс мозги перегреются)
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
04.07.2013, 19:08  [ТС] 6
salam, я понимаю, что поворот идет либо когда нет цикла, либо когда он четен, то есть не будет того что нахлестнется одно направление на другое, у меня проблема с тем как просмотреть все элементы и в цикле не зациклится

Добавлено через 1 минуту
svk2140, а у меня второй день так( хотя вроде как продвигается но все равно ничего не работае
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
04.07.2013, 19:22 7
Цитата Сообщение от Рехеана Посмотреть сообщение
salam, я понимаю, что поворот идет либо когда нет цикла, либо когда он четен, то есть не будет того что нахлестнется одно направление на другое, у меня проблема с тем как просмотреть все элементы и в цикле не зациклится
да, я думаю, именно это условие и нужно поставить. просто напишите правильно дфс. можете искать цикл просто так. если найдется, посмотреть, четный или нет. тут просто реализация грамотная нужна.
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
04.07.2013, 19:26  [ТС] 8
salam, вот с ней и проблема, не могу написать так чтобы в цикл проходило и чтобы это было так как это требует преподаватель, практика в универе идет, он совсем объяснять не хочет дал книжку там не очень понятно... а вы не могли бы помочь?
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
04.07.2013, 19:27 9
Цитата Сообщение от Рехеана Посмотреть сообщение
и чтобы это было так как это требует преподаватель
я ведь наверняка знаю, чего он требует...
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
04.07.2013, 19:33  [ТС] 10
Прошу прощения торможу.

вот по этой методичке там алгоритм есть, а реализовано на си шарп.
и как бы там не учитываются циклы.
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
04.07.2013, 20:00 11
не люблю я очень эти методички... прошу прощения. давайте подумаем. цикл можно найти так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int graph[SIZE][SIZE]; // матрица смежности
int color[SIZE];            // color[i] может принимать одно из трех значений {0, 1, 2}
                                 // 0 - вершина не была посещена,
                                 // 1 - мы зашли в нее, но еще не вышли,
                                 // 2 - мы уже вышли из этой вершины.
void dfs(int v) {
   color[v] = 1;                  // мы зашли в вершину v
   for(int i=0; i < SIZE; i++)
      if(i != v && graph[v][i] == true)
         if(color[i] == 1) {      // мы нашли цикл, так как пытаемся пойти из вершины 
                                      // с цветом 1 в вершину с цветом 1, то есть 
         }                           // в вершину, из которой еще не вышли
         else if(color[i] == 0)
                  dfs(i);
   color[v] = 2;
}
дальше можете делать с этим циклом, что угодно.

Добавлено через 4 минуты
вообще говоря, сейчас вы можете только определить, есть ли он. чтобы что-то делать непосредственно с ним, необходим массив предков.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int graph[SIZE][SIZE]; // матрица смежности
int par[SIZE];               // массив предков 
int color[SIZE];            // color[i] может принимать одно из трех значений {0, 1, 2}
                                 // 0 - вершина не была посещена,
                                 // 1 - мы зашли в нее, но еще не вышли,
                                 // 2 - мы уже вышли из этой вершины.
void dfs(int v) {
   color[v] = 1;                  // мы зашли в вершину v
   for(int i=0; i < SIZE; i++)
      if(i != v && graph[v][i] == true)
         if(color[i] == 1) {      // мы нашли цикл, так как пытаемся пойти из вершины 
                                      // с цветом 1 в вершину с цветом 1, то есть 
         }                           // в вершину, из которой еще не вышли
         else if(color[i] == 0) {
                  par[i] = v;   // мы называем вершину v предком вершины i, 
                                   // так как обход в глубину попал в i именно из v
                  dfs(i);
         }
   color[v] = 2;
}
Добавлено через 1 минуту
надеюсь, вам это все поможет.
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 29
04.07.2013, 20:08  [ТС] 12
salam, спасибо
0
04.07.2013, 20:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2013, 20:08
Помогаю со студенческими работами здесь

поиск в глубину
Дали задание реализовать поиск в глубину.Пробую релизовать по e-maxx http://e-maxx.ru/algo/dfsно не...

Поиск в глубину
&quot;В рождественскую ночь Санта-Клаус спускается по каминной трубе и раскладывает детям подарки....

Поиск в глубину
Помогите с заданием пожалуйста. Число 1 можно записать как сумму n чисел вида 1 / i, где i -...

Поиск в глубину
Объясните плз поиск в глубину с примером. Сам много реалихаций нашел, но до конца не могу...


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

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