Форум программистов, компьютерный форум, киберфорум
Наши страницы

Найти количество островов из единиц - 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 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом точка. Напечатать те...
Какая скорость ввода gets? C++
Собственно какая скорость ввода gets? К примеру у scanf'a 2 секунды, а gets'a?
C++ Нужно написать бинарное дерево и выполнить ряд заданий http://www.cyberforum.ru/cpp-beginners/thread1497597.html
написать бинарное дерево на задания: 1. Реализуйте программу, в которой выполняются все основные операции с бинарным деревом. 2. Найдите количество четных элементов бинарного дерева. Укажите эти...
C++ Ошибка в коде (Ошибка сегментирования (core dumped) Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) { подробнее

Показать сообщение отдельно
Геомеханик
759 / 565 / 387
Регистрация: 26.06.2015
Сообщений: 1,325
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;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru