Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
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
0

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

12.07.2015, 16:38. Показов 11510. Ответов 15
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть задачка.
Задача Острова
Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо
единице. Найдите количество «островов», образованных единицами. Под «островом»
понимается группа единиц (либо одна единица), со всех сторон окруженная нулями
(или краями матрицы). Единицы относятся к одному «острову», если из одной из них
можно перейти к другой «наступая» на единицы, расположенные в соседних клетках.
Соседними являются клетки, граничащие по горизонтали или вертикали.
Уточним, что одна единица тоже считается островом. Также предлагаю считывать
матрицу из файла.
Входные данные
В первой строке файла INPUT.TXT записано натуральное число N не больше 100 -
размер квадратной матрицы. В следующих N строках задаются элементы матрицы
через пробел.
Выходные данные
В файл OUTPUT.TXT выведите единственное число - количество островов.
Пример
INPUT.TX
T
OUTPUT.TX
T
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
4
Решение задачи
Итак, это классическая задача на поиск в глубину графа. Понятно, что надо
обходить матрицу и каким-то образом вычислять количество островов. Вариантрешения такой: после того, как мы попадаем на остров, надо это зафиксировать
увеличив переменную-результат на единицу. Чтобы второй раз не посчитать один и
тот же остров, сразу после посещения необходимо его уничтожить, т.е. присвоить
всем клеткам острова значение ноль.
Поскольку тест задачи не слишком мал, стоит написать процедуру уничтожения
островов, назовем ее"count". Чтобы во время выполнения процедуру не "выскочить"
за пределы массива, сделаем его не размером N x N, а размеров N+2 x N+2, это даст
нам возможность окружить искомый массив размеромN x N нулями.

вот код

Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void is_col(int**, int row, int col, const int size);
void is_row(int**, int row, int col, const int size);
void count_island(int**, const int size, int& len);
 
int  main(void) 
{
     int size = 0, r, c;
     FILE* fp = fopen("1.txt", "r"); // открываем файл
     if(! fp)
         exit(1);
     fscanf(fp, "%2d", &size); // считываем sqrt(размер) матрицы
     fgetc(fp);
     if(! size) {
           fclose(fp);
           exit(2);
      }
      // выделяем динамическую память под матрицу
      int** mat  = new int*[size];
      for(r = 0; r < size; r++)
            mat[r] = new int[size];
 
      char  buf[255];
      char* str;
 
      memset(buf, '\0', sizeof(buf));
      for(r = 0; fgets(buf, sizeof(buf), fp); r++) 
{ // считыаем матрицу из файла
               for(c = 0, str = strtok(buf, " "); str; str = strtok(NULL, " "), c++)
                     mat[r][c] = atoi(str);
      }
      fclose(fp);
 
      int length = 0;
      count_island(mat, size, length);  // подсчитываем острова матрицы
 
     // выводим результат на дисплей и в файл
     fp = fopen("D:\\result.txt", "w+");
     fprintf(fp, "%d", length);
     fclose(fp);
     printf("island count: %d\n", length);
    
     // освобождаем занятую динамическую память
     for(r = 0; r < size; r++) {
            delete[] mat[r];
            mat[r] = NULL;
     }
     delete[] mat;
     mat = NULL;
 
    getchar();
    return 0;
}
 
void is_row(int** mat, int row, int col,  const int size) {
  int r;
  for(r = row + 1; r < size; r++) {
      if(mat[r][col]) {
            is_col(mat, r, col, size);
            mat[r][col] = 0;
      } else
            break;
  } 
  for(r = row - 1; r >= 0; r--) {
      if(mat[r][col]) {
           is_col(mat, r, col, size);
           mat[r][col] = 0;
      } else
          break;
  }
}
 
void is_col(int** mat, int row, int col, const int size) {
  int c;
  for(c = col + 1; c < size; c++) {
       if(mat[row][c]) {
            is_row(mat, row, c, size);
            mat[row][c] = 0;
       } else
            break;
  } 
  for(c = col - 1; c >= 0; c--) {
       if(mat[row][c]) {
           is_row(mat, row, c, size);
           mat[row][c] = 0;
       } else
           break;
  }
}
 
void count_island(int** mat, const int size, int& len) {
    int r, c;
prev:
    for(r = 0; r < size; r++) {
          for(c = 0; c < size; c++) {
               if(mat[r][c]) {
                    is_row(mat, r, c, size);
                    is_col(mat, r, c, size);
                    mat[r][c] = 0;
                    len++;
                    goto prev;
                }
          }
    }
}



Код данной программы реализован без графов. А мне нужно используя поиск в глубину реализовывать данный алгоритм. Есть идеи?

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

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

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

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

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

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

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

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

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

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

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