Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

#define MAX_ROWS 9

#define MAX_COLS 10
typedef struct
{
int value;
int group;
bool passed;
} cell;
cell m[MAX_ROWS + 2][MAX_COLS + 2];
cell x[MAX_ROWS + 2][MAX_COLS + 2];
int gs[100];
int groups, a, b;
void completeaza(int, int);
void schimba_grup(int, int);
void do(void)
{
bool found;
int i, j, k, max;
srand(time(NULL));
groups = 0;
for (i = 0; i < 100; i++)
gs[i] = 0;
for (i = 0; i <= MAX_ROWS + 1; i++)
for (j = 0; j <= MAX_COLS + 1; j++)
{
m[i][j].value = -1;
m[i][j].group = 0;
m[i][j].passed = false;
}
for (i = 1; i <= MAX_ROWS; i++)
for (j = 1; j <= MAX_COLS; j++)
m[i][j].value = rand() % 5;
for (i = 0; i <= MAX_ROWS + 1; i++)
{
for (j = 0; j <= MAX_COLS + 1; j++)
cout << setw(2) << m[i][j].value << ' ';
cout << endl;
}
groups = 0;
for (i = 1; i <= MAX_ROWS; i++)
for (j = 1; j <= MAX_COLS; j++)
completeaza(i, j);
for (i = 1; i <= MAX_ROWS; i++)
{
for (j = 1; j <= MAX_COLS; j++)
cout << setw(2) << m[i][j].group << ' ';
cout << endl;
}

for (i = 1; i <= MAX_ROWS; i++)


for (j = 1; j <= MAX_COLS; j++)
gs[m[i][j].group]++;
max = gs[0];
k = 0;
for (i = 1; i < 100; i++)
if (gs[i] > max)
{
max = gs[i];
k = i;
}
found = false;
for (i = 1; i <= MAX_ROWS && !found; i++)
for (j = 1; j <= MAX_COLS && !found; j++)
if (m[i][j].group == k)
{
a = i;
b = j;
found = true;
}
}
void completeaza(int i, int j)
{
int lipeli = 0;
int min_group, k, pos_min;
int dir[4] = { 100, 100, 100, 100 }; // SUS, DREAPTA, JOS, STANGA
if (m[i][j].passed == false)
{
if (m[i][j].group == 0)
m[i][j].group = ++groups;
m[i][j].passed = true;
// directia SUS
if (m[i][j].value == m[i-1][j].value)
{
if (m[i-1][j].group == 0)
m[i-1][j].group = m[i][j].group;
dir[0] = m[i-1][j].group;
lipeli++;
}
// directia DREAPTA
if (m[i][j].value == m[i][j+1].value)
{
if (m[i][j+1].group == 0)
m[i][j+1].group = m[i][j].group;
dir[1] = m[i][j+1].group;
lipeli++;
}
// directia JOS
if (m[i][j].value == m[i+1][j].value)
{
if (m[i+1][j].group == 0)
m[i+1][j].group = m[i][j].group;

dir[2] = m[i+1][j].group;
lipeli++;
}
// directia STANGA
if (m[i][j].value == m[i][j-1].value)
{
if (m[i][j-1].group == 0)
m[i][j-1].group = m[i][j].group;
dir[3] = m[i][j-1].group;
lipeli++;
}
if (lipeli != 0)
{
min_group = dir[0];
pos_min = 0;
for (k = 1; k < 4; k++)
if (dir[k] < min_group)
{
min_group = dir[k];
pos_min = k;
}
for (k = 0; k < 4; k++)
if (dir[k] != dir[pos_min] && dir[k] != 100)
schimba_grup(dir[k], dir[pos_min]);
}
}
}
void schimba_grup(int vechi, int nou)
{
for (int i = 1; i <= MAX_ROWS; i++)
for (int j = 1; j <= MAX_COLS; j++)
if (m[i][j].group == vechi)
m[i][j].group = nou;
}

You might also like