Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
endsh
0 / 0 / 0
Регистрация: 21.06.2016
Сообщений: 1
1

Выделение области одинаковых соседствующих элементов в матрице

21.06.2016, 19:23. Просмотров 760. Ответов 1
Метки нет (Все метки)

Добрый день.

Помогите решить вот эту задачку. Идея есть, но воплотить никак не могу. Идея заключается в том что бы найти в матрице елемент который равен 1, после этого проверить соседние елементы слева, справа, сверху и снизу, после чего если хоть один равен 1(например слева) двигаться дальше пока он не будет равен 0 и так далее пока не проверим остальные стороны после чего выделяем это как область(заменяя эти 1чки на другую цифру, 2 например)) и так далее. Вот как то так

Заранее спасибо.

Задана прямоугольная таблица размером n * m ( 1≤n , m≤100 ) , элементами которой являются числа 0 и 1. Будем считать , что элементы со значениями 1 образуют сплошную область с соседними по горизонтали или вертикали элементами со значениями 1. Вычислить количество таких областей и площадь самой большой из них .

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 19:23
Ответы с готовыми решениями:

Найти среднее арифметическое элементов, принадлежащих заштрихованной области в матрице
111111111 матрица (n x n) 011111110 001111100 000111000 000010000...

В матрице определить номер строки, в которой находиться самая длинная серия одинаковых элементов
Ув форумчане проверьте решение задачи 1)в целочисленной квадратной матрице...

Пара соседствующих одинаковых символов
Даны символы s1, s2, … Известно, что символ s1 отличен от восклицательного...

Проверить, имеются ли в строке два соседствующих одинаковых символа
Выясните, имеются ли в строке S два соседствующих одинаковых символа.

Выяснить, имеются ли тройки соседствующих одинаковых символов
Здравствуйте ,прошу о помощи так как не могу написать программу не используя...

1
Геомеханик
792 / 597 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
22.06.2016, 19:03 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <stdio.h>
#include <malloc.h>
#define MAX_SZ  32
#define N       7
#define M       8
 
typedef struct {
    short row, col;
} pos;
 
typedef struct _page {
    struct _page* next;
    pos   arr[MAX_SZ];
    int   cnt;
} page;
 
typedef struct {
    page* lst;
} stack_t;
 
void stack_init(stack_t* st){ st->lst = NULL; }
int  stack_empty(stack_t* st) { return (st->lst == NULL); }
int  stack_push(stack_t* st, short row, short col);
void stack_pop(stack_t* st);
void stack_clear(stack_t* st);
void stack_top(stack_t* st, short* prow, short* pcol);
 
const short g_dirs[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
 
int main(void){
    stack_t st;
    short row, col, r1, c1, i, j, d, s, k, m;
    short mat[N][M] = {
        {1,1,0,0,1,1,1,1},
        {1,1,0,0,0,0,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,1,1,1,0},
        {1,1,0,1,1,1,1,1},
        {1,1,0,0,0,0,0,0},
        {1,1,1,0,0,0,1,1},
    };
 
    m = s = 0;
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j){
            if(mat[i][j] != 1)
                continue;
 
            mat[i][j] += 1;
            k = 0;
 
            stack_init(&st);
            stack_push(&st, i, j);
 
            while(! stack_empty(&st)){
                stack_top(&st, &row, &col);
                stack_pop(&st);
                ++k;
 
                for(d = 0; d < 4; ++d){
                    r1 = row + g_dirs[d][0];
                    c1 = col + g_dirs[d][1];
                    if((r1 < 0) || (c1 < 0) || (r1 >= N) || (c1 >= M) || (mat[r1][c1] != 1))
                        continue;
 
                    stack_push(&st, r1, c1);
                    mat[r1][c1] += 1;
                }
            }
 
            ++m;
            if(k > s)
                s = k;
        }
    }
 
    printf("count area: %d\n", m);
    printf("maximum  S: %d\n", s);
 
    //вывести результирующею матрицу
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j)
            printf("%d ", mat[i][j]);
        putchar('\n');
    }
    return 0;
}
 
//вставка
int stack_push(stack_t* st, short row, short col){
    page* p = st->lst;
    if(p != NULL){
        if((p->cnt + 1) < MAX_SZ){
            p->arr[p->cnt].row = row;
            p->arr[p->cnt].col = col;
            ++(p->cnt);
            return 1;
        }
    }
 
    p = (page*)malloc(sizeof(page));
    if(p == NULL)
        return 0;
    
    p->arr[0].row = row;
    p->arr[0].col = col;
    p->cnt  = 1;
    p->next = st->lst;
    st->lst = p;
    return 1;
}
 
//удаление
void stack_pop(stack_t* st){
    page* p = st->lst;
    if(p != NULL){
        if(p->cnt > 0)
            --(p->cnt);
 
        if(p->cnt == 0){
            st->lst = st->lst->next;
            free(p);
        }
    }
}
 
//удаление всех
void stack_clear(stack_t* st){
    while(! stack_empty(st))
        stack_pop(st);
}
 
//получение текущих данных
void stack_top(stack_t* st, short* prow, short* pcol){
    page* p = st->lst;
    if((p != NULL) && (p->cnt > 0)){
        *prow = p->arr[p->cnt - 1].row;
        *pcol = p->arr[p->cnt - 1].col;
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 19:03

Выяснить, имеется ли среди s1,...,sn пара соседствующих одинаковых символов
Даны символы s1, s2,... Известно, что символ s1 отличен от восклицательного...

Определить, имеются ли в строке два соседствующих одинаковых символа
Привет всем:) Нужно разработать программу, которая для заданной строки s...

Выяснить, имеется' ли среди s1,…,sn пара соседствующих одинаковых символов
Выяснить, имеется' ли среди s1,…,sn пара соседствующих одинаковых символов.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru