Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 70
1

Дана матрица a(m, n), состоящая из нулей и единиц. Найдите в ней квадратную подматрицу из одних единиц максима

23.11.2016, 08:58. Показов 2325. Ответов 1
Метки нет (Все метки)

Дана матрица a(m, n), состоящая из нулей и единиц. Найдите в ней квадратную подматрицу из одних единиц максимального размера.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2016, 08:58
Ответы с готовыми решениями:

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным...

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов.
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным...

Дано матрицу, состоящую из нулей и единиц. Найти самый большой по площади прямоугольник, состоящий из одних единиц
Дано матрицу, состоящую из нулей и единиц. Найти самый большой по площади прямоугольник, состоящий...

Дана строка, состоящая из групп нулей и единиц
Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или...

1
1 / 1 / 3
Регистрация: 17.09.2015
Сообщений: 23
23.11.2016, 10:50 2
Лучший ответ Сообщение было отмечено justoriginal как решение

Решение

Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;
 
type
  TArrRow = array of boolean;
  TArr = array of TArrRow;
  TRes = record
    col, row, n, m: integer;
  end;
 
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel4: TPanel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    n,m: integer;
    arr: TArr;
    procedure UpdateArray;
    procedure Search;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  UpdateArray;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Search;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  UpdateArray;
end;
 
procedure TForm1.Search;
var
  i,j,k,l,m0,cols,rows,x: integer;
  res: array of TRes;
begin
  for i := 0 to n-1 do begin
    for j := 0 to m-1 do begin
      if arr[i][j] then begin
        m0:=m;
        cols:=0;
        for k := i to n-1 do begin
          if not arr[k,j] then break;
          inc(cols);
          rows:=0;
          for l := j to m0-1 do begin
            inc(rows);
            if arr[k,l] then begin
              if(cols>1)and(rows>1)then begin
                SetLength(res,Length(res)+1);
                res[Length(res)-1].col:=i+1;
                res[Length(res)-1].row:=j+1;
                res[Length(res)-1].n:=cols;
                res[Length(res)-1].m:=rows;
              end;
            end else begin
              m0:=l;
              break;
            end;
          end;
        end;
      end;
    end;
  end;
  ListBox1.Clear;
  l:=0;
  for I := 0 to Length(res)-1 do
    if res[i].n*res[i].m>l then
      l:=res[i].n*res[i].m ;
  if l>0 then
    for I := 0 to Length(res)-1 do
      if res[i].n*res[i].m=l then
        ListBox1.Items.Add(
          IntToStr(res[i].col)+', '+
          IntToStr(res[i].row)+', '+
          IntToStr(res[i].n)+', '+
          IntToStr(res[i].m)
        );
end;
 
procedure TForm1.UpdateArray;
var
  i,j,v: integer;
begin
  n:=10+Random(11);
  m:=10+Random(11);
  Panel4.Caption:=IntToStr(n)+', '+IntToStr(m);
  StringGrid1.ColCount:=n;
  StringGrid1.RowCount:=m;
  SetLength(arr,n);
  for i := 0 to n-1 do begin
    SetLength(arr[i],m);
    for j := 0 to m-1 do begin
      v:=Random(2);
      arr[i][j]:=Boolean(v);
      StringGrid1.Cells[i,j]:=IntToStr(v);
    end;
  end;
end;
 
end.
Прикрепил полный код
Кнопка Update - генерирует матрицу
Кнопка Search - находит подматрицы из единиц
Результат отображается слева от таблицы. Результатов может быть несколько, так как может быть несколько подматриц с максимальным размером.
Результат включает в себя четыре значения. Первые два значения - это координаты верхнего левого угла подматрицы(отсчет идет с верхнего левого угла и начинается с единицы), а две последующих значения - это ширина и высота.
Вложения
Тип файла: zip Arr.zip (607.7 Кб, 27 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2016, 10:50

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество символов в самой длинной группе
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество символов в самой длинной...

Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным количеством символов
Посмотрите плиз задачу, что я неправильно написал, выдаёт всё время "четное" даже если символов...

Дана строка,состоящая из групп нулей и единиц.Найти количество групп с пятью символами.
Помогите пожалуйста,очень срочно. Дана строка,состоящая из групп нулей и единиц.Каждая группа...

Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами. Найти количество групп с пятью сим
Приветик, ребятки) У меня вот такое задание: Дана строка, состоящая из групп нулей и единиц....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru