Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 5

Использовать очередь или алгоритм проверки связности графа

29.07.2013, 16:42. Показов 4360. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Помогите плиз решить следующую задачу. Заранее спасибо.
Входной файл: input.txt
Выходной файл: output.txt
Время на тест: 1 секунда
На посвящение в студенты собрались все первокурсники. Некоторые из них знают друг друга. Считается, что два незнакомых человека тоже друзья, если у них есть какой-нибудь общий друг. Все ли они друзья между собой?
Формат входного файла:
В первой строке входного файла input.txt записано целое число N - количество первокурсников. Во второй строке входного файла input.txt записано целое число K - количество известных непосредственных знакомств. Далее в следующих K строках записано по паре целых чисел Ai и Bi через один пробел, означающих, что первокурсники с номерами Ai и Bi знакомы непосредственно. Ограничения на значения: 1≤N≤1000, 0≤K≤1000000, 1≤Ai≤N, 1≤Bi≤N, i=1..N.
Формат выходного файла:
В первую строку выходного файла output.txt необходимо вывести без пробелов результат проверки - слово YES (если они все друзья) или слово NO (в противном случае).
Пример ввода:
4
3
1 2
1 3
2 4
Пример вывода:
YES
Пример ввода:
4
2
1 2
2 4
Пример вывода:
NO
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2013, 16:42
Ответы с готовыми решениями:

Поиск компонент связности графа, не работает алгоритм
Работаю с MFI представлением графа Тест 1. ME = 2 5 1 3 4 5 4 2 3 2 5 1 2 4, MV = 0 2 6 8 11 14. p1 = 5, q1 = 7; В результате 0 Тест 2....

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

Поиск компонент связности графа
Помогите, пожалуйста, исправить ошибки в коде... Лабораторная работа № 5 Поиск компонент связности графа Граф задан его матрицей...

4
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
29.07.2013, 17:12
вы хотите чтобы мы решили, а вы сдали? или всё-таки у вас есть свои наработки и вам нужно подсказать?
0
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 5
29.07.2013, 17:18  [ТС]
Тут на форуме нашел код на С++, пытаюсь перебить. Буду рад помощи
Java
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
#include <iostream> 
#include <fstream> 
#include <queue> 
using namespace std; 
   
bool mass[1000][1000]; 
bool mass2[1000]; 
   
int main() 
{    
    queue<int> myqueue; 
    int N,k; 
    int buf,buf2,count=0; 
    ifstream fin("input.txt"); 
    fin>>N; 
    fin>>k; 
   
    for(int i=0; i<k;i++) 
    { 
        fin>>buf; 
        fin>>buf2; 
        if(buf==buf2&&i==0)count=1; 
        mass[buf-1][buf2-1]=1; 
        if(myqueue.empty()) 
        { 
            myqueue.push(buf); 
            mass2[buf-1]=true; 
        } 
        mass[buf2-1][buf-1]=true; 
    } 
      
    fin.close(); 
    ofstream fout("output.txt"); 
    for(int i=0; i<N; i++) 
    { 
        if(mass2[i]==false) 
        {myqueue.push(i+1); 
        while(!myqueue.empty()) 
    {    
        buf=myqueue.front(); 
        myqueue.pop(); 
        for(int j=0; j<N; j++) 
        { 
            if(mass[buf-1][j]==true) 
            { 
                myqueue.push(j+1); 
                mass[buf-1][j]=false; 
                mass[j][buf-1]=false; 
                mass2[j]=true; 
            } 
        }    
    } 
    count++; 
        } 
    } 
    if (count==1) 
    { 
    fout<<"YES"<<endl; 
    } 
    else
    { 
        fout<<"NO"<<endl; 
    } 
    fout.close(); 
    return 0; 
}
0
58 / 58 / 45
Регистрация: 19.02.2012
Сообщений: 118
30.07.2013, 15:53
приходилось как-то решать такую задачу...
краткое пояснение - обход в ширину(dfs), с подсчетом вершин, которые достигли, если все вершины достигнуты, т.е. количество посещенных равно n, то ответ YES, иначе - NO.
Java
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.io.*;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.Vector;
 
/**
 * Created with IntelliJ IDEA.
 * User: alexey
 * Date: 29.03.13
 * Time: 20:47
 * To change this template use File | Settings | File Templates.
 */
public class graph {
 
    public static StringTokenizer st;
    public static BufferedReader br;
    public static PrintWriter out;
    public static boolean[] visited ;
    public static Vector<Vector<Integer>>  g;
    public static int ans=0;
    
    public static void main(String... args) throws IOException{
        br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
 
        int n = nextInt();
        int m = nextInt();
        visited = new boolean[n];
        
        g = new Vector<Vector<Integer>>(n);
 
        for (int i=0;i<n;i++){
            g.add(new Vector<Integer>(n));
 
        }
 
        buildVertexVect(m);
        dfs(0);
        out.print(ans==n? "YES":"NO");
 
        out.close();
    }             
    
 
    public static void buildVertexVect(int m) throws IOException{
        for (int i =0;i<m;i++)   {
 
            int v = nextInt();
            int p = nextInt();
 
            g.get(v - 1).add(p - 1);
            g.get(p-1).add(v-1);
 
        }
 
    }
 
    public static void dfs(int v){
 
        visited[v]=true;
 
        ans++;
        for (int i =0; i<g.get(v).size(); i++){
            int p = g.get(v).get(i);
            if(!visited[p])
                dfs(p);
 
        }
 
 
    }
    public static String nextToken() throws IOException {
        while ( st == null || !st.hasMoreTokens() ) {
            st = new StringTokenizer(br.readLine());
        }
        return st.nextToken();
    }
 
    public static int nextInt() throws NumberFormatException, IOException {
        return Integer.parseInt(nextToken());
    }
 
    public static double nextDouble() throws NumberFormatException, IOException {
        return Double.parseDouble(nextToken());
    }
 
    public static long nextLong() throws NumberFormatException, IOException {
        return Long.parseLong(nextToken());
    }
}
1
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 5
30.07.2013, 17:21  [ТС]
Спасибо. Надеюсь будет полезно не только мне
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2013, 17:21
Помогаю со студенческими работами здесь

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

Поиск компонент связности графа
Граф задан его матрицей смежности. Требуется определить количество компонент связности этого графа . При этом должны быть конкретно...

Число вершин связности графа
Помогите пожалуйста мне надо написать прогу по нахождению Числа вершин связности графа я уже наверно месяц не могу не чего толкового...

Подсчитать количество компонент связности графа
Всем привет, есть задача, которую я решил на с++, а надо на питоне, может кто-нибудь помочь переписать, а то я синтаксиса не знаю :) ...

Вывод вершин в компонентах связности графа
Здравствуйте, уважаемые пользователи форума! Есть программа, которая ищет по матрице смежности компоненты связности неориентированного...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru