Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void wypelnijPoziomIPion(int poziom[], int pion[])
- {
- poziom[0] = 2;
- poziom[1] = 1;
- poziom[2] = -1;
- poziom[3] = -2;
- poziom[4] = -2;
- poziom[5] = -1;
- poziom[6] = 1;
- poziom[7] = 2;
- pion[0] = -1;
- pion[1] = -2;
- pion[2] = -2;
- pion[3] = -1;
- pion[4] = 1;
- pion[5] = 2;
- pion[6] = 2;
- pion[7] = 1;
- }
- void zerujPlansze(int plansza[][8])
- {
- for (int i = 0; i < 8; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- plansza[i][j] = 0;
- }
- }
- }
- void wypelnijDostepnosc(int dost[][8], int plansza[0][8])
- {
- int licznik;
- for (int i = 0; i < 8; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- if (plansza[i][j]) dost[i][j] = 9;
- else
- {
- licznik = 0;
- if ( (i - 2 >= 0) && (j - 1 >= 0) && (plansza[i - 2][j - 1] == 0) ) licznik++;
- if ( (i - 2 >= 0) && (j + 1 <= 7) && (plansza[i - 2][j + 1] == 0) ) licznik++;
- if ( (i - 1 >= 0) && (j - 2 >= 0) && (plansza[i - 1][j - 2] == 0) ) licznik++;
- if ( (i - 1 >= 0) && (j + 2 <= 7) && (plansza[i - 1][j + 2] == 0) ) licznik++;
- if ( (i + 2 <= 7) && (j - 1 >= 0) && (plansza[i + 2][j - 1] == 0) ) licznik++;
- if ( (i + 2 <= 7) && (j + 1 <= 7) && (plansza[i + 2][j + 1] == 0) ) licznik++;
- if ( (i + 1 <= 7) && (j - 2 >= 0) && (plansza[i + 1][j - 2] == 0) ) licznik++;
- if ( (i + 1 <= 7) && (j + 2 <= 7) && (plansza[i + 1][j + 2] == 0) ) licznik++;
- dost[i][j] = licznik;
- }
- }
- }
- /*
- for (int i = 0; i < 8; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- cout << dost[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl;
- */
- }
- int sprawdzDrugiRuch(int poziom[8], int pion[8], int plansza[8][8], int dostepnosc[8][8], int biezacyWiersz, int biezacaKolumna)
- {
- int najnizszaDostepnosc = 10;
- plansza[biezacyWiersz][biezacaKolumna] = 1;
- wypelnijDostepnosc(dostepnosc, plansza);
- for (int i = 0; i < 8; i++)
- {
- if ( (poziom[i] + biezacyWiersz >= 0) && (poziom[i] + biezacyWiersz < 8) )
- {
- if ( (pion[i] + biezacaKolumna >= 0) && (pion[i] + biezacaKolumna < 8) && !(plansza[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna]) )
- {
- if (najnizszaDostepnosc > dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna])
- {
- najnizszaDostepnosc = dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna];
- }
- }
- }
- }
- plansza[biezacyWiersz][biezacaKolumna] = 0;
- return najnizszaDostepnosc;
- }
- int zrobPrzejscie(int startowyWiersz, int startowaKolumna)
- {
- int plansza[8][8], dostepnosc[8][8];
- int poziom[8], pion[8];
- int biezacyWiersz, biezacaKolumna, licznik;
- int najnizszaDostepnosc, najnizszaDostepnoscX, najnizszaDostepnoscY;
- biezacyWiersz = startowyWiersz;
- biezacaKolumna = startowaKolumna;
- wypelnijPoziomIPion(poziom, pion);
- zerujPlansze(plansza);
- plansza[biezacyWiersz][biezacaKolumna] = 1;
- wypelnijDostepnosc(dostepnosc, plansza);
- licznik = 1;
- while (true)
- {
- najnizszaDostepnosc = 9;
- int dostepnosci[8];
- najnizszaDostepnoscX = 0;
- najnizszaDostepnoscY = 0;
- for (int i = 0; i < 8; i++)
- {
- dostepnosci[i] = 10;
- if ( (poziom[i] + biezacyWiersz >= 0) && (poziom[i] + biezacyWiersz < 8) )
- {
- if ( (pion[i] + biezacaKolumna >= 0) && (pion[i] + biezacaKolumna < 8) && !(plansza[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna]) )
- {
- dostepnosci[i] = dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna];
- }
- }
- }
- najnizszaDostepnosc = dostepnosci[0];
- for (int i = 1; i < 8; i++)
- {
- if (najnizszaDostepnosc > dostepnosci[i])
- {
- najnizszaDostepnosc = dostepnosci[i];
- najnizszaDostepnoscX = poziom[i];
- najnizszaDostepnoscY = pion[i];
- }
- }
- int drugiRuch[8];
- int drugiRuchMin;
- for (int i = 0; i < 8; i++)
- {
- drugiRuch[i] = 10;
- if (najnizszaDostepnosc == dostepnosci[i])
- {
- drugiRuch[i] = sprawdzDrugiRuch(poziom, pion, plansza, dostepnosc, biezacyWiersz+poziom[i], biezacaKolumna+pion[i]);
- }
- }
- drugiRuchMin = drugiRuch[0];
- for (int i = 1; i < 8; i++)
- {
- if (drugiRuchMin > drugiRuch[i] )
- {
- drugiRuchMin = drugiRuch[i];
- }
- }
- for (int i = 0; i < 8; i++)
- {
- if (drugiRuchMin == drugiRuch[i] )
- {
- najnizszaDostepnoscX = poziom[i];
- najnizszaDostepnoscY = pion[i];
- }
- }
- if (najnizszaDostepnosc < 9)
- {
- biezacyWiersz += najnizszaDostepnoscX;
- biezacaKolumna += najnizszaDostepnoscY;
- licznik++;
- wypelnijDostepnosc(dostepnosc, plansza);
- plansza[biezacyWiersz][biezacaKolumna] = 1;
- }
- else break;
- }
- return licznik;
- }
- int main()
- {
- cout << "Ponizej szachownica, ktorej kazdemu polu jest przypisana liczba skokow skoczka, gdy startuje z tego pola:";
- cout << endl << endl;
- for (int i = 0; i < 8; i++)
- {
- for (int j = 0; j < 8; j++)
- {
- cout << zrobPrzejscie(i, j) << " ";
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement