Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 21

Для любителей графов

30.03.2015, 18:59. Показов 4886. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Иван Иванович любит ходить на скачки, надеясь на них заработать кругленькую сумму. Ему приглянулась лошадь с номером K, и он решил проверить, сможет ли она выиграть у всех остальных лошадей. Иван Иванович раздобыл информацию, в которой для некоторых пар лошадей сообщается, какая из этих лошадей быстрее. Также он узнал, что у всех лошадей разные скорости.

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


Входной текстовый файл содержит в первой строке два целых числа N (1 <= N <= 100) и K (1 <= K <= N), где N - количество лошадей, принимающих участие в скачках, K - номер лошади, на которую хочет сделать ставку Иван Иванович. Следующие строки содержат по два числа X и Y (1 <= X, Y <= N), обозначающие, что лошадь с номером X быстрее лошади с номером Y. Пары X и Y не повторяются. Набор данных завершается строкой, содержащей единственный ноль. Эту строку обрабатывать не надо.
Гарантируется, что информация, раздобытая Иваном Ивановичем, корректна.
Выходной текстовый файл должен содержать слово "Yes" без кавычек, если Иван Иванович уверен в своем выигрыше. В противном случае выведите "No" без кавычек.

Пример:
1 тест
5 5
1 2
2 3
3 4
5 1
0

Yes

2 тест
4 2
2 3
4 1
0

No
3 тест
3 1
1 2
3 2
0

No


Помогите придумать, как использовать графы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2015, 18:59
Ответы с готовыми решениями:

Теорие графов. Композиция двух неор. графов.
Здравствуйте. Прошу помощи уже здесь :| (old topic)... Прошу помочь с составлением алгоритма &quot;Композиции двух неориентированных...

Алгоритм Джонсона для графов
Подскажите, пожалуйста, где можно найти реализацию этого алгоритма или помогите с реализацией. Я так понял, что сначала там идёт алгоритм...

Для заданных двух графов построить их соединение
добрый день! помогите решить задачу: Соединением графов G1 и G2 называется граф G=(V,E), для которого V=V1объединениеV2,...

4
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 8
30.03.2015, 23:35
задали именно эту задачу! присоединяюсь и прошу помочь!
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.03.2015, 00:40
Лучший ответ Сообщение было отмечено Zivaka как решение

Решение

Расскажу идею.
Пусть лошадь А быстрее лошади Б. Тогда для графа будет существовать дуга от вершины А к вершине Б. Граф представляется в виде квадратной несимметричной матрицы (0 - нет дуги, 1 - есть дуга, диагональ - 0).
Если ставка идет на лошадь Х, то нам нужно проверить, возможно ли посетить из вершины Х все остальные вершины. Если это возможно, то тогда лошадь Х самая быстрая, иначе непонятно, то бишь "No".
1
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 21
01.04.2015, 22:12  [ТС]
Как-то так получилось, кому интересно.
C++
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
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int n;
vector <bool> v(110, false);
 
void dfs(vector <vector<int> >& a, int x)
{
    v[x] = true;
 
    for (int i = 0; i<n; i++)
        if (a[x][i] == 1 && !v[i])
            dfs(a, i);
 
}
 
int main()
{
    int k;
    cin >> n >> k;
    k--;
    vector < vector<int> > a(n, vector<int>(n, 0));
    while (true)
    {
        int x, y;
        cin >> x;
        if (x == 0) break;
        cin >> y;
        a[x - 1][y - 1] = 1;
    }
 
    dfs(a, k);
    v[k] = 1;
    for (int i = 0; i<n; i++)
        if (!v[i])
        {
            cout << "No";
            return 0;
        }
    cout << "Yes";
    return 0;
}
0
3 / 2 / 1
Регистрация: 29.10.2020
Сообщений: 28
13.07.2021, 10:34
Тоже решение, но строчек меньше)
C++
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
#include <bits/stdc++.h>
using namespace std;
int w[105][105], visited[105], n, k;
 
void dfs(int j) {
    visited[j] = 1;
    for (int i = 0; i < n; i++) {
        if (w[i][j] && !visited[i]) dfs(i);
    }
}
 
int main() {
    cin >> n >> k;
    int a, b, ans = 1; k--;
 
    while (cin >> a) {
        if (!a) { break; continue; }
        cin >> b;
        a--; b--;
        w[b][a] = 1;
    }
 
    dfs(k);
    for (int i = 0; i < n; i++) {
        if (visited[i] == 0) ans = 0;
    }
    cout << (ans ? "Yes" : "No");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2021, 10:34
Помогаю со студенческими работами здесь

Программа для построения графов. Как запустить созданный файл в graphviz?
Необходимо создать программу, которая будет обрабатывать матрицу смежности графа и записывать файл для graphviz. Проблема состоит в том что...

Для любителей Altium
Как бы дорожку провести ? А то как-то все длинно получается. Она одна и последняя. Опыт у меня не большой , а сам &quot;опыт&quot; ( он же...

Для любителей поразмышлять:)
В некотором царстве-государстве, жили-были разбойники. И вот поймали 100 самых умных и благородных и говорят им: &quot;Видите комнату? В...

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

Для любителей кальяна
Здравствуйте, Дорогие товарищи! Давайте поговорим на тему кальяна. Кто какой табак предпочитает, у кого какой кальян, как часто курите и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru