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

Найти в матрице квадратную подматрицу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверьте правильность написания кода и коментарии http://www.cyberforum.ru/cpp-beginners/thread645458.html
Задача: Написать программу которая принимает в качестве аргумента имя файла f с русским текстом и печатает его в точности по одному предложению в строке Желательно подробные комментарии к задаче! Заранее спасибо #include<iostream> #include <fstream> using namespace std; int my_strlen(char *str) { int res=0; while(str)
C++ перебор элементов массива дан массив целых чисел. поменять местами пары элементов в массиве: 1 и2,3 и 4,5 и 6 и т.д. http://www.cyberforum.ru/cpp-beginners/thread645457.html
C++ Определить, находится ли точка в треугольнике
заданы прямоугольные координаты Х1,У1,Х2,У2,Х3,У3 вершин треугольника и координаты Х и У точки. определить, находится ли точка в треугольнике
C++ сделать коментарии и проверьте код к задаче ргр по теории информатики
Задача: Написать алгоритм который сортирует массив следующим образом: если его длина меньше n то использовать метод пузырьковой сортировки а иначе-метод Хоара. Экспериментальным путём определить оптимальное значение n для типов date int и строк 16 ПРошу сделать коменты желательно поподробнее ну проверить правильность кода. Заранее благодарен тем кто поможет! #include<iostream> #include...
C++ факториал http://www.cyberforum.ru/cpp-beginners/thread645453.html
сумма факториалов
C++ Последовательность А как вывести на экран самую длинную последовательность?? Не получается!! #include "stdafx.h" #include "iostream" #include "conio.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { подробнее

Показать сообщение отдельно
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
02.09.2012, 13:38     Найти в матрице квадратную подматрицу
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N 20
 
typedef struct Region
{
    int x0;
    int y0;
    int x1;
    int y1;
    int width;
    int height;
} REGION;
 
bool exists(REGION* pRegions, int i, int j)
{
    for (int k = 0; pRegions[k].x0 >= 0; k++)
        if (i >= pRegions[k].y0 && i <= pRegions[k].y1 &&
            j >= pRegions[k].x0 && j <= pRegions[k].x1)
            return true;
 
    return false;
}
 
int main()
{
    int A[N][N] = { { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
                    { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1 },
                    { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1 },
                    { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1 },
                    { 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 },
                    { 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
                    { 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0 },
                    { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0 },
                    { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 },
                    { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0 },
                    { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0 },
                    { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                    { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                    { 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 },
                    { 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 } };
 
    REGION* pRegions = new REGION[N * N];
 
    int d = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            int pos = j; if (exists(pRegions, i, j)) continue;
            while (A[i][j] == A[i][j+1] && A[i][j] == 1) j++;
 
            bool b = false; int k = i;
            while (k < N && abs(pos-j) > 0 && !b)
            {
                for (int q = pos; q <= j && !b; q++)
                    b = (A[k][q] != A[k+1][q] && A[k+1][q] != 1) ? 1 : 0;
 
                k++;
            }
 
            if (abs(pos-j)+1 > 0 && abs(i-k)-1 > 0)
            {
                pRegions[d].x0 = pos;
                pRegions[d].y0 = i;
                pRegions[d].x1 = j;
                pRegions[d].y1 = k-1;
                pRegions[d].width = abs(pos-j) + 1;
                pRegions[d].height = abs(i-k);
 
                d++;
            }
        }
    }
 
    int max = 0, max_i = 0;
    for (int m = 0; pRegions[m].x0 >= 0; m++)
    {
        printf("x0 = %d y0 = %d x1 = %d y1 = %d width = %d height = %d\n\n",
            pRegions[m].x0, pRegions[m].y0, pRegions[m].x1, 
            pRegions[m].y1, pRegions[m].width, pRegions[m].height);
 
        if (pRegions[m].width * pRegions[m].height > max)
        {
            max = pRegions[m].width * pRegions[m].height;
            max_i = m;
        }
 
        for (int n1 = 0; n1 < pRegions[m].height; n1++)
        {
            for (int n2 = 0; n2 < pRegions[m].width; n2++)
                printf("1 ");
            printf("\n");
        }
 
        printf("\n");
    }
 
    printf("-----------------------------------------------------------\n");
    printf("x0 = %d y0 = %d x1 = %d y1 = %d width = %d height = %d\n\n",
        pRegions[max_i].x0, pRegions[max_i].y0, pRegions[max_i].x1, 
        pRegions[max_i].y1, pRegions[max_i].width, pRegions[max_i].height);
 
    for (int z1 = 0; z1 < pRegions[max_i].height; z1++)
    {
        for (int z2 = 0; z2 < pRegions[max_i].width; z2++)
            printf("1 ");
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
Миниатюры
Найти в матрице квадратную подматрицу  
 
Текущее время: 15:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru