Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 09 / free_space_in_room.cpp
blob: 532a5e16f58e7f44aed4285eceef97ff538cffb4 (plain) (blame)
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
#include <iostream>
using namespace std;

//Задача 2:


//Подадена е булева матрица. (Стая)
// 1- заета клетка
// 0- свободна клетка.
// 11111111
// 11000001
// 11000001
// 11111111

// Подават ни обект(мебел) с размери n и k.
// Трябва да отпечатаме дали има място, където да поставим обекта


// Пример:
// В горния пример има къде да поставим обек 2x2, но няма къде да поставим обект 3x3 



const int ROOM_SIZE_X = 4;
const int ROOM_SIZE_Y = 8;

//Проверява дали има подматрица само със свободни клетки(само с 0-ли) с големина objXDim, objYDim
//където горният ляв ъгъл е на коодриднати upperLeftX и upperLeftY/
bool hasFreeSpaceFromThisLeftUpCorner(bool room[ROOM_SIZE_X][ROOM_SIZE_Y], int objXDim, int objYDim, int upperLeftX, int upperLeftY)
{
	for (int i = 0;  i < objXDim; i++)
	{
		for (int j = 0; j < objYDim; j++)
		{
			if (room[upperLeftX + i][upperLeftY + j] != 0)
				return false;
		}
	}
	return true;
}
bool hasSpace(bool room[ROOM_SIZE_X][ROOM_SIZE_Y], int objXDim, int objYDim)
//дали има подматрица само от 0-ли с размери objXDim x objYDim
{
	for (int i = 0; i < ROOM_SIZE_X - objXDim + 1; i++)
	{
		for (int j = 0; j < ROOM_SIZE_Y - objYDim + 1; j++)
		{
			//i,j - кандидат за горен ляв ъгъл на потенциално свободното пространство 
			if (hasFreeSpaceFromThisLeftUpCorner(room, objXDim, objYDim, i, j))
			{
				//i,j са горен ляв ъгъл на достатъчно голямо свободно място за обект с рамери objXDim objYDim
				
				cout << "Free space found!" <<endl;
				cout << "Corners:" << endl;
				cout << i << " " << j<<endl;
				cout << i + objXDim - 1 << " " << j << endl;
				cout << i + objXDim-1 << " " << j + objYDim-1<<endl;
				cout << i << " " << j + objYDim - 1 << endl;
				return true;
			}
		}
	}
	return false;
}
int main()
{
	bool room[ROOM_SIZE_X][ROOM_SIZE_Y] = { { 1, 1, 1, 1, 1, 1, 1, 1 },
					        { 1, 1, 0, 0, 0, 0, 0, 1 }, 
					        { 1, 1, 0, 0, 0, 0, 0, 1 }, 
						{ 1, 1, 1, 1, 1, 1, 1, 1 } };
	hasSpace(room, 2, 4); //Има ли къде да разположим мебел с размер 2x4
}