Professional Documents
Culture Documents
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct graf
{
int wartosc_komorki = 0;
int ruch = 0;
graf* gora;
graf* lewo;
graf* prawo;
graf* dol;
bool visited;
int poprzednik;
};
graf tab[40][20];
//graf//
void budowanie_grafu(int liczba_kolumn, int liczba_wierszy, int*
elementy_w_kolejce, int* ktory_ruch, int* C_wspx, int* C_wspy, graf tab[40][20],
int** plansza, int kolejeczka[2][100]);
void dodawanie_do_kolejki(int* ktory_ruch, int kolejeczka[2][100], graf tab[40]
[20], int* elementy_w_kolejce);
//graf//
int main()
{
srand(static_cast<unsigned int>(time(nullptr)));
// ZMIENNE //
int liczba_kolumn = 20;
int liczba_wierszy = 40;
int A_wspx;
int A_wspy;
int B_wspx;
int B_wspy;
int ktory_ruch = 0;
int elementy_w_kolejce = 1;
int C_wspx;
int C_wspy;
// ZMIENNE //
// DEKLARACJA TABLIC //
int** plansza = new int* [liczba_wierszy];
for (int i = 0; i < liczba_wierszy; i++)
{
plansza[i] = new int[liczba_kolumn];
}
int kolejeczka[2][100];
// DEKLARACJA TABLIC //
//FUNKCJE//
uzupelnianie_planszy_segmentami(plansza);
uzupelnianie_struktur(tab);
// ZWALNIANIE PAMIECI //
for (int i = 0; i < liczba_wierszy; i++)
{
delete[] plansza[i];
}
delete[] plansza;
// ZWALNIANIE PAMIECI //
return 1;
}
do
{
*B_wspx = rand() % liczba_kolumn;
*B_wspy = rand() % liczba_wierszy;
} while (plansza[*B_wspy][*B_wspx] != 1 || (*B_wspx == *A_wspx && *B_wspy ==
*A_wspy));
int tabliczka_b[5][5] = {
{0, 0, 1, 1, 0},
{1, 0, 0, 1, 0},
{1, 1, 1, 1, 1},
{0, 1, 1, 1, 0},
{0, 0, 1, 1, 0} };
int tabliczka_c[5][5] = {
{1, 1, 1, 1, 1},
{1, 1, 0, 1, 1},
{1, 1, 0, 0, 1},
{0, 1, 0, 0, 0},
{0, 1, 1, 1, 1} };
int tabliczka_d[5][5] = {
{0, 0, 1, 1, 1},
{0, 1, 1, 0, 1},
{1, 1, 0, 1, 1},
{1, 0, 1, 1, 0},
{0, 1, 1, 0, 0} };
int tabliczka_e[5][5] = {
{1, 1, 1, 0, 0},
{0, 1, 1, 1, 0},
{1, 1, 0, 1, 1},
{1, 1, 0, 1, 1},
{1, 1, 1, 1, 0} };
int tabliczka_f[5][5] = {
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{1, 1, 1, 1, 1},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0} };
int losowanySegment;
cout << "WYLOSOWANE SEGMENTY: " << endl;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 4; j++)
{
losowanySegment = rand() % 6 + 1;
switch (losowanySegment)
{
case 1:
cout << "A ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_a[k][l];
}
}
break;
case 2:
cout << "B ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_b[k][l];
}
}
break;
case 3:
cout << "C ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_c[k][l];
}
}
break;
case 4:
cout << "D ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_d[k][l];
}
}
break;
case 5:
cout << "E ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_e[k][l];
}
}
break;
case 6:
cout << "F ";
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
plansza[(i * 5 + k)][(j * 5 + l)] = tabliczka_f[k][l];
}
}
break;
default:
cout << "BLAD";
break;
}
}
cout << endl;
}
}
int miejsce_w_kolejce = 0;
while (czy_wykrylo)
{
if (elementy_w_kolejce != 0)
{
for (int k = 0; k < *elementy_w_kolejce; k++)
{
i = kolejeczka[0][k];
j = kolejeczka[1][k];
if (czy_wykrylo)
{
if (i != 0)
{
if (plansza[i - 1][j] != 3)
{ // mozna isc w gore
if (plansza[i - 1][j] != 0)
{ // nie jest czarne pole//
if (tab[i - 1][j].visited != 1)
{ // nie zostalo
odwiedzone//
tab[i - 1][j].visited = 1; // komorka juz
odwiedzona
tab[i - 1][j].poprzednik = tab[i]
[j].wartosc_komorki;
tab[i - 1][j].ruch = *ktory_ruch + 1;
tab[i][j].gora = &tab[i - 1][j];
}
}
}
else
{
czy_wykrylo = 0;
*C_wspx = j; // kolumna//
*C_wspy = i; // wiersz//
break;
}
}
}
if (czy_wykrylo)
{
if (j != 0)
{
if (plansza[i][j - 1] != 3)
{ // mozna isc w lewo
if (plansza[i][j - 1] != 0)
{ // nie jest czarne pole//
if (tab[i][j - 1].visited != 1)
{ // nie zostalo
odwiedzone//
tab[i][j - 1].visited = 1; // komorka juz
odwiedzona
tab[i][j - 1].poprzednik = tab[i]
[j].wartosc_komorki;
tab[i][j - 1].ruch = *ktory_ruch + 1;
tab[i][j].lewo = &tab[i][j - 1];
}
}
}
else
{
czy_wykrylo = 0;
*C_wspx = j; // kolumna//
*C_wspy = i; // wiersz//
break;
}
}
}
if (czy_wykrylo)
{
if (j != (liczba_kolumn - 1))
{
if (plansza[i][j + 1] != 3)
{ // mozna isc w prawo
if (plansza[i][j + 1] != 0)
{ // nie jest czarne pole//
if (tab[i][j + 1].visited != 1)
{ // nie zostalo
odwiedzone//
tab[i][j + 1].visited = 1; // komorka juz
odwiedzona
tab[i][j + 1].poprzednik = tab[i]
[j].wartosc_komorki;
tab[i][j + 1].ruch = *ktory_ruch + 1;
tab[i][j].prawo = &tab[i][j + 1];
}
}
}
else
{
czy_wykrylo = 0;
*C_wspx = j; // kolumna//
*C_wspy = i; // wiersz//
break;
}
}
}
if (czy_wykrylo)
{
if (i != (liczba_wierszy - 1))
{
if (plansza[i + 1][j] != 3)
{ // mozna isc w dol
if (plansza[i + 1][j] != 0)
{ // nie jest czarne pole//
if (tab[i + 1][j].visited != 1)
{ // nie zostalo
odwiedzone//
tab[i + 1][j].visited = 1; // komorka juz
odwiedzona
tab[i + 1][j].poprzednik = tab[i]
[j].wartosc_komorki;
tab[i + 1][j].ruch = *ktory_ruch + 1;
tab[i][j].dol = &tab[i + 1][j];
}
}
}
else
{
czy_wykrylo = 0;
*C_wspx = j; // kolumna//
*C_wspy = i; // wiersz//
break;
}
}
}
}
*ktory_ruch += 1;
dodawanie_do_kolejki(ktory_ruch, kolejeczka, tab, elementy_w_kolejce);
}
}
}