Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Создать консольное приложение на С/С++ для обработки и печати текста https://www.cyberforum.ru/ cpp-beginners/ thread1497655.html
Создать приложение которое бы -обрабатывала текст -печатала весь текст -печать файла ***печать всех слов содержащих букву А -печать первого слова каждой строки Помогите пожалуйста, буду очень признательна!
C++ Не получается создать класс Account из книги Дейтелов
Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса.Класс должен предусматривать конструктор для инициализации элемента данных. Конструктор должен подтверждать значение начального баланса и гарантировать, что оно больше или...
C++ Напечатать слова последовательности, которые отличны от последнего слова и удовлетворяют заданным свойствам Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: 1) каждая буква входит в слово не менее двух раз; 2) в слове гласные буквы (a, e, i, o, u)... https://www.cyberforum.ru/ cpp-beginners/ thread1497610.html C++ Какая скорость ввода gets? https://www.cyberforum.ru/ cpp-beginners/ thread1497609.html
Собственно какая скорость ввода gets? К примеру у scanf'a 2 секунды, а gets'a?
Нужно написать бинарное дерево и выполнить ряд заданий C++
написать бинарное дерево на задания: 1. Реализуйте программу, в которой выполняются все основные операции с бинарным деревом. 2. Найдите количество четных элементов бинарного дерева. Укажите эти элементы и их уровни. 3. Найдите сумму элементов сбалансированного дерева, находящихся на уровне k. 4. Оператор мобильной связи организовал базу данных абонентов, содержащую сведения о...
C++ Ошибка в коде (Ошибка сегментирования (core dumped) https://www.cyberforum.ru/ cpp-beginners/ thread1497583.html
Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) {
C++ При считывании файла появляются лишние переходы на следующую строку https://www.cyberforum.ru/ cpp-beginners/ thread1497571.html
void __fastcall TForm2::Button3Click(TObject *Sender) //Кнопка "Назад" { FILE *Slovar; Slovar=fopen("Slovar.txt","w"); for(int i=0;i<ListBox1->Count;i++) { fprintf(Slovar,"%s\n",ListBox1->Items->Strings); } fclose(Slovar); Form1->Show();
Dev cpp + формоляпка C++
Добрый день. я много раз видел как в dev cpp используют менеджер формы. т е можно на форму положить кнопочки иконки. и сделать это не программными средствами. подскажите как ее вызвать ? или эта фича отдельно устанавливается ?
C++ Неверный формат вывода Здравствуйте! Язык С++ только осваиваю, но уже возникло тупиковое затруднение. Суть программы: написать функцию, которая принимает два параметра типа unsigned short int и возвращает результат деления первого параметра на второй. Функция не должна выполнять операцию деления, если второе число равно нулю. Но в этом случае она должна возвратить значение -1. Мое видение решения: Int... https://www.cyberforum.ru/ cpp-beginners/ thread1497564.html C++ Поля в синглтоне Каким образом нужно объявлять поля в синглтоне? Если объявляю так: public: static std::thread* trd; То в .cpp файле с реализацией функций синглтона выдаёт ошибку LNK2001(Unresolved external symbol) на эти поля. А если в .cpp написать: std::thread* MyClass::trd; https://www.cyberforum.ru/ cpp-beginners/ thread1497560.html
C++ Расшифровка таинственного пробела
Большая просьба помочь.Есть задача проверить является ли число двоичным или десятичным: вот код #include <iostream> using namespace std; int main() {setlocale(LC_ALL,"Rus"); char stroka; int _int, i=0, n, x=0; cout<<" Введите строку >> \t \n"; cin.getline(stroka, 255);
C++ Ошибка в приложении: "error LNK2019: ссылка на неразрешенный внешний символ" Создал консольное приложение и в него добавил код: #include "afxwin.h" // MFC Основные и стандартные компоненты class CMainWnd : public CFrameWnd { public: CMainWnd(); // Конструктор по умолчанию }; CMainWnd::CMainWnd() https://www.cyberforum.ru/ cpp-beginners/ thread1497544.html
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 39
28.07.2015, 10:55  [ТС] 0

Найти количество островов из единиц - C++ - Ответ 7917817

28.07.2015, 10:55. Показов 11522. Ответов 15
Метки (Все метки)

Ответ

Доброе времени суток! Я новичок в программировании. Мне не понятен вот этот код. Написан он очень уж умно. А мне нужен примитивный, просто код, что бы его можно было легко читать. А этот код даже "загуглив" практически каждую строчку, требует практики, что бы его понять. Может быт, кто- нибудь смог бы его переписать более просто? на базовом уровне?

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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <cmath>
#include <fstream>
#include <iostream>
#include <set>
#include <string>
#include <utility>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef std::pair   < int,  int     >   T_cell;
typedef std::set    < T_cell        >   T_cells;
/////////////////////////////////////////////////////////////////////////////////////////
void    go_to_cell_with_cells_and_visited_cells
    (
        T_cell                  cell,
        T_cells     const   &   cells,
        T_cells             &   visited_cells
    )
{
    visited_cells.insert( cell );
 
    for (
            auto
            adj_cell_it     =   cells.begin     ();
            adj_cell_it     !=  cells.end       ();
            ++adj_cell_it
        )
    {
        if  (
                    visited_cells.count( *adj_cell_it )     ==  0
 
                &&  (
                                abs( cell.first     -   adj_cell_it->first      )
                            +   abs( cell.second    -   adj_cell_it->second     )
                        ==  1
                    )
            )
        {
            go_to_cell_with_cells_and_visited_cells
                (
                    *adj_cell_it,
                    cells,
                    visited_cells
                );
        }
    }//for
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_islands_count_of( T_cells   const   &   cells )
{
    int         res_count   =   0;
    T_cells     visited_cells;
 
    for (
            auto
            cell_it     =   cells.begin     ();
            cell_it     !=  cells.end       ();
            ++cell_it
        )
    {
        if  (
                visited_cells.count( *cell_it )     ==  0
            )
        {
            ++res_count;
 
            go_to_cell_with_cells_and_visited_cells
                (
                    *cell_it,
                    cells,
                    visited_cells
                );
        }
    }//for
 
    return  res_count;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    const   T_str   INPUT_FILENAME      =   "input.txt";
    const   T_str   OUTPUT_FILENAME     =   "output.txt";
 
    std::ifstream   ifile( INPUT_FILENAME );
    T_cells     cells;
 
    if( !ifile )
    {
        std::cout   <<  "Невозможно прочитать данные из файла."
                    <<  std::endl;
    }
    else
    {
        int     matr_dim    =   0;
        ifile   >>  matr_dim;
 
        for( int  i = 0; i < matr_dim; ++i )
        {
            for( int  j = 0; j < matr_dim; ++j )
            {
                int     cell_val    =   0;
                ifile   >>  cell_val;
 
                if( cell_val )
                {
                    cells.insert    (
                                        T_cell( i, j )
                                    );
                }
            }//for
        }//for
 
        std::ofstream   ofile( OUTPUT_FILENAME );
        ofile   <<  get_islands_count_of( cells );
    }//else
 
    system("pause");
}
этот код к такому заданию, только я не понял, в этом алгоритме есть обход в глубину или нету?

Задача Острова
Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо
единице. Найдите количество «островов», образованных единицами. Под «островом»
понимается группа единиц (либо одна единица), со всех сторон окруженная нулями
(или краями матрицы). Единицы относятся к одному «острову», если из одной из них
можно перейти к другой «наступая» на единицы, расположенные в соседних клетках.
Соседними являются клетки, граничащие по горизонтали или вертикали.
Уточним, что одна единица тоже считается островом. Также предлагаю считывать
матрицу из файла.
Входные данные
В первой строке файла INPUT.TXT записано натуральное число N не больше 100 -
размер квадратной матрицы. В следующих N строках задаются элементы матрицы
через пробел.
Выходные данные
В файл OUTPUT.TXT выведите единственное число - количество островов.
Пример
INPUT.TXT
4

OUTPUT.TXT
5
1 0 1 1 1
0 0 0 0 0
1 1 1 0 1
0 1 0 0 1
0 0 0 1 1

Решение задачи
Итак, это классическая задача на поиск в глубину графа. Понятно, что надо
обходить матрицу и каким-то образом вычислять количество островов. Вариант решения такой: после того, как мы попадаем на остров, надо это зафиксировать
увеличив переменную-результат на единицу. Чтобы второй раз не посчитать один и
тот же остров, сразу после посещения необходимо его уничтожить, т.е. присвоить
всем клеткам острова значение ноль.
Поскольку тест задачи не слишком мал, стоит написать процедуру уничтожения
островов, назовем ее"count". Чтобы во время выполнения процедуру не "выскочить"
за пределы массива, сделаем его не размером N x N, а размеров N+2 x N+2, это даст
нам возможность окружить искомый массив размеромN x N нулями.

Вернуться к обсуждению:
Найти количество островов из единиц C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2015, 10:55
Готовые ответы и решения:

Найти количество «островов»
Данная матрица размерности N N ×, элементами которой являются 0 и 1. Группу единичек, граничащей...

Найти количество островов на море
дана карта в виде массива из 0 и 1, она записана в файле input.txt с таким форматом: в первой...

В массиве найти количество "островов" из единиц
Помогите перевести с Паскаля на С# или предложите свой вариант решения: Нужно в квадратном...

Найти количество островов в матрице
Здраствуйте, преподаватель дал задание про острова следующего характера. Задана матрица nxm и...

15
28.07.2015, 10:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2015, 10:55
Помогаю со студенческими работами здесь

Определить по карте количество островов
На карте островного государства Лимония, которая хранится в виде прямоугольной таблицы, нули...

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

Подсчитать количество единиц в числе, кроме единиц в младших разрядах
Дано натуральное число N. Определить количество единиц в цифровой записи числа, кроме единиц в...

Определить количество единиц в цифровой записи числа, кроме единиц в младших разрядах
Ребят,помогите,срочно надо! Сам что-то не понимаю( Дано натуральное число N. Определить...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru