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

на С++ Черно-белая графика

16.09.2011, 09:47. Показов 2152. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно решить на С++

Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали.

Входные данные

В первой строке файла INPUT.TXT записано натуральное число N не больше 100 - размер квадратной матрицы. В следующих N строках задаются элементы матрицы через пробел.

Выходные данные

В файл OUTPUT.TXT выведите единственное число - количество островов


Есть решение на Паскале
Pascal
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
const
  m = 102;
var
  a:array [1..m, 1..m] of integer;
  i,j,n,res: integer;
  input,output: text;
procedure count(i,j: integer);
  begin
    if a[i,j] <> 1 then
      exit;
    a[i,j] := 0;
    count(i + 1, j);
    count(i - 1, j);
    count(i, j + 1);
    count(i, j - 1);
  end;
begin
  res:= 0;
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  read(input, n);
  {Заполняем массив нулями}
  for i:= 1 to n+2 do
    for j:=1 to n+2 do
      a[i,j]:=0;
  {Считываем матрицу из файла}
  for i:= 2 to n+1 do
    for j:=2 to n+1 do
      read(input,a[i,j]);
  {Обходим матрицу в поиске островов}
  for i := 2 to n+1 do
    for j := 2 to n+1 do
      if a[i,j] = 1 then
        begin
          inc(res);
          count(i,j);
        end;
  write(output,res);
  close(input);
  close(output);
end.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2011, 09:47
Ответы с готовыми решениями:

Черно-белая графика (Задача)
Одна из базовых задач компьютерной графики – обработка черно-белых изображений. Изображения можно представить в виде прямоугольников...

Задача на с++ Черно-белая графика
Нужно решить на с++ заранее спасибоо! Одна из базовых задач компьютерной графики – обработка черно-белых изображений. Изображения...

Черно-белая картинка
Здравствуйте подскажите пожалуйста как правильно прописать фильтр grayscale для фонового изображения блока IE? вот так filter:...

1
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.09.2011, 16:50
Лучший ответ Сообщение было отмечено serik13 как решение

Решение

serik13, вот вариант набросал, если что писал в торопях.
Формат входящего файла:
10
1 1 1 0 0 1 1 1 0 1
1 0 1 0 1 1 0 1 0 0
1 1 1 0 1 0 0 1 0 0
0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 1 1 0 1
0 0 0 0 0 0 1 0 0 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1


Код.
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
#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("matrix.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;
                }
          }
    }
}
Результат: 7 - островов в матрице
Поиск вёлся по такому принципу как показан на картинке ниже.
Изображения
 
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2011, 16:50
Помогаю со студенческими работами здесь

Черно-белая картинка
Не везет нам что-то с двд. Подруга купила себе двд плеер, подключила его к телеку, а там изображение не цветное, а черно-белое. Говорит,...

Черно-белая печать без полей
Здравствуйте! На днях столкнулся с такой проблемой. Нужно распечатать черно-белый документ полностью без полей. Я устанавливаю в настройках...

Вместо цвета заливки различная черно-белая штриховка
Здравствуйте. Возникла следующая проблема: вместо цвета заливки получаю штриховку различных конфигураций при выборе кистей различных...

GeForce 7600 + Телевизор NOVEX CT-2935 = черно-белая картинка
Добрый вечер! Хочу подключить телевизор к компьютеру все время получаю ч/б изображение. Подключение осуществляю через переходник и шнур RCA...

Черно-белая печать на мфу hp deskjet ink advantage 2545
Всем привет! Народ, подскажите пожалуйста, как на мфу hp deskjet ink advantage 2545 установить черно-белую печать при печати с компьютера?...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 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. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru