Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать консольное приложение на С/С++ для обработки и печати текста http://www.cyberforum.ru/cpp-beginners/thread1497655.html
Создать приложение которое бы -обрабатывала текст -печатала весь текст -печать файла ***печать всех слов содержащих букву А -печать первого слова каждой строки Помогите пожалуйста, буду очень признательна!
C++ Не получается создать класс Account из книги Дейтелов Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса.Класс должен предусматривать конструктор для инициализации элемента данных. Конструктор должен подтверждать значение начального баланса и гарантировать, что оно больше или... http://www.cyberforum.ru/cpp-beginners/thread1497620.html
C++ Напечатать слова последовательности, которые отличны от последнего слова и удовлетворяют заданным свойствам
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: 1) каждая буква входит в слово не менее двух раз; 2) в слове гласные буквы (a, e, i, o, u)...
Какая скорость ввода gets? C++
Собственно какая скорость ввода gets? К примеру у scanf'a 2 секунды, а gets'a?
C++ Нужно написать бинарное дерево и выполнить ряд заданий http://www.cyberforum.ru/cpp-beginners/thread1497597.html
написать бинарное дерево на задания: 1. Реализуйте программу, в которой выполняются все основные операции с бинарным деревом. 2. Найдите количество четных элементов бинарного дерева. Укажите эти элементы и их уровни. 3. Найдите сумму элементов сбалансированного дерева, находящихся на уровне k. 4. Оператор мобильной связи организовал базу данных абонентов, содержащую сведения о...
C++ Ошибка в коде (Ошибка сегментирования (core dumped) Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) { подробнее

Показать сообщение отдельно
Геомеханик
529 / 336 / 257
Регистрация: 26.06.2015
Сообщений: 769
12.07.2015, 19:45     Найти количество островов из единиц
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
#include <stdio.h>
#include <malloc.h>
 
typedef struct _stack {
    struct _stack* next;
    int    row, col;
} stack_t;
 
static void stack_push(stack_t** s, int row, int col);
static void stack_pop(stack_t** s);
 
 
//кол-во островов
int count_islands(FILE* _out, FILE* _in){
    int      num, i, j, r, c, r1, c1, d, isn;
    char*    mat, *p;
    stack_t* st;
 
    const int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
    
    if(fscanf(_in, "%d", &num) != 1)
        return 0;
 
    mat = (char*)malloc((num*num) * sizeof(char));
    if(mat == NULL)
        return 0;
 
    p = mat;
    for(i = num * num; i > 0; --i){
        if(fscanf(_in, "%1d", &d) != 1){
            free(mat);
            return 0;
        }
        *p++ = (char)d;
    }
    
    //поиск островов
    isn = 0;
    for(i = 0; i < num; ++i){
        for(j = 0; j < num; ++j){
            if(! mat[i*num + j])
                continue;
 
            st = NULL;
            stack_push(&st, i, j);
 
            while(st != NULL){
                r = st->row;
                c = st->col;
                stack_pop(&st);
 
                mat[r*num + c] = 0;
                for(d = 0; d < 4; ++d){
                    r1 = r + dir[d][0];
                    c1 = c + dir[d][1];
                    if((r1 <  0)   || (c1 < 0) ||
                       (r1 >= num) || (c1 >= num))
                       continue;
 
                    if(mat[r1*num + c1])
                        stack_push(&st, r1, c1);
                }
            }
            ++isn;
        }
    }
 
    free(mat);
    fprintf(_out, "count islands: %d", isn);
    return 1;
}
 
 
int main(void){
    FILE* fin  = fopen("input.txt",  "r");
    FILE* fout = fopen("output.txt", "w+");
    count_islands(fout, fin);
    fclose(fout);
    fclose(fin);
 
/*  можно задать с консоли
    printf("Enter N: ");
    count_islands(stdout, stdin);
    fflush(stdin);
*/
    return 0;
}
 
Текущее время: 18:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru