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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Monster-Lock
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 9
#1

Матрицы. Поиск области, заполненной единицами. C++ - C++

21.12.2010, 19:56. Просмотров 501. Ответов 1
Метки нет (Все метки)

Такая задача:
Дана матрица, заполненная нулями и единицами. Нужно вывести на экран максимальную область, заполненную единицами. Область должна быть прямоугольной, в остальном не имеет значения ее форма.
Код
#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
     setlocale(LC_ALL,"");
     int mat[8][8];
     for(int i=0; i<8; i++)
          for(int j=0;j<8;j++)
               mat[j][i]=rand()%2+0;

     for(int i=0; i<8; i++){
          cout<<endl;
          for(int j=0;j<8;j++)
               cout<<mat[j][i]<<" ";
     }
int st=0; int sb=0; int qw=0, qe=0;;
int x=0,y=0;
     for(int i=0; i<8; i++){
          for(int j=0;j<8;j++){
               if(mat[j][i]==1){
                    x=i;
                    y=j;
                    while(mat[j][i]!=0){
                         st++;
                    }
               }
               for(int k=j;k<8;k++){
                    while(mat[k][st]!=0){
                         sb++;
                    }
               }
               for(int r=st; r!=0; r--){
                    qw=st;
                    while(mat[sb][r]!=0){
                         qw--;
                    }
               }
               for(int z=qw; z!=0; z--){
                    while(mat[z][qw]!=0){
                         qe=z;
                    }
               }
               if (x==qw && y==qe){
                    cout<<"это то: ";
                    for(int g=x; g<st; g++){
                         cout<<endl;
                         for(int h=y;h<sb;h++){
                              cout<<mat[g][h]<<" ";
                         }
                    }
               }

          }
     }

     cout<<endl;
     system("pause");
}
В коде зависает цикл. Долго отлаживал, так проблему и не нашел.
Правил таким образом:
Код
while(mat[st][i]!=0){
    st++;
}
за границы массива вроде не выходит, но цикл все равно виснет. Собственно говоря таких циклов 4, и проблема в них одна и та же.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 19:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Матрицы. Поиск области, заполненной единицами. C++ (C++):

В квадратной матрице, заполненной нулями и единицами, переставить элементы согласно условию - C++
Здравствуйте. Есть такое задание: Дан массив 8х8. Нужно вводить нули и единицы (одна единица в строке). На экран вывести исходный...

Данная квадратная матрица размерности N. Заполнить матрицу в заштрихованной области единицами - C++
Данная квадратная матрица размерности N. Заполнить матрицу в заштрихованной области единицами, в не заштрихованной - нулями.

Вычислить сумму элементов целочисленной матрицы, заполненной случайными числами - C++
Написать приложение, которое считает сумму элементов матрицы. Дана целочисленная матрица. Она заполнена случайными числами интервала,...

Найти наименьший элемент прямоугольной матрицы, заполненной случайными числами - C++
2.Найти наименьший элемент прямоугольной матрицы X(20х10), заполненной случайными числами на отрезке от -10 до 50 и вывести на экран номер...

Среди столбцов заданной целочисленной матрицы, заполненной случайными числами, порядка n* n, найти столбец с элементами - C++
что не так? Среди столбцов заданной целочисленной матрицы, заполненной случайными числами, порядка n* n, найти столбец с элементами...

Заменить все положительные элементы матрицы единицами - C++
Подскажите, пожалуйста. Я написал программу, которая выводит на экран матрицу размером 10х10 (рандомное заполнение двумерного массива). Как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.12.2010, 22:38 #2
Вообще-то алгоритм должен быть таким:
Встретилась в массиве 1.
1. Перебираем вправо элементы в этой строке пока встречаются одни 1 или пока не закончится строка. Сравнили площадь с уже имеющейся.
2. Смотрим вниз от элемента на котором остановились. Если там единица, то переходим к п.1, только просматриваем вправо элементы второй строки (но не более длинны первой).
и т.д. пока вниз не закончится столбец или не встретится 0.
Далее снова начинаем искать новую единицу в массиве ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2010, 22:38
Привет! Вот еще темы с ответами:

Заполнить элементы главной диагонали матрицы нулями остальные единицами - C++
Дала целочисленная матрица nxn. Заполнить элементы: главной диагонали 0, остальные 1.

Заполнить первую половину матрицы размером n*n единицами, а вторую - нулями - C++
2. Заполнить первую половину двумерного массива размерности n x n еденицами, а вторую 0 , выручите пожалуйста

Заполнить заданную область квадратной матрицы единицами, а остальное - нулями - C++
Данная действительно квадратная матрица размерности N. Заполнить матрицу в заштрихованной области единицами, в не заштрихованной - нулями.

Элементы матрицы умножить на скаляр C=5,2. Элементы третьего столбца заменить единицами - C++
Не могу понять как вычислить матрицу, подскажите пожалуйста=) Данная матрица А (4,5), элементы умножить на скаляр C = 5,2. Элементы...


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

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

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