Hej. Mam takie zadanie. Zając porusza się jak konik szachowy. Mam wczytać prostokąt o wymiarach nxm, w których będą 0 i 1. Mam wczytaj pozycję wejściową zająca i pozycję do której ma dojść. Zając może chodzić tylko po polach z zerami. Mam wydrukować na końcu czy istnieje droga dojścia do pozycji końcowej czy nie. Napisałem już program, ale system oceniania daje mi 3/6 pkt. Testowałem na przykładowych danych np.
3 4 wymiary prostokąta o takich polach:
0 0 1 0
1 1 0 0
0 1 0 0
0 0 pozycja wejściowa zająca
2 2 pozycja do której ma dojść.
Program jest taki:
#include <iostream>
#include <cstdlib>
using namespace std;
bool szukaj(int n, int m, int **pole, int sX, int sY, int kX, int kY){
bool istnieje=false;
if (pole[sX][sY] == 0){
if (pole[sX][sY] == pole[kX][kY]) {
istnieje = true;
}
else {
pole[sX][sY] = -1;
if (!istnieje && sX < n-1 && sY < m-2) {
istnieje = szukaj(n, m, pole, sX+1, sY+2, kX, kY);
}
if (!istnieje && sX < n-1 && sY > 1) {
istnieje = szukaj(n, m, pole, sX+1, sY-2, kX, kY);
}
if (!istnieje && sX > 0 && sY < m-2) {
istnieje = szukaj(n, m, pole, sX-1, sY+2, kX, kY);
}
if (!istnieje && sX > 0 && sY > 1) {
istnieje = szukaj(n, m, pole, sX-1, sY-2, kX, kY);
}
if (!istnieje && sX < n-2 && sY < m-1) {
istnieje = szukaj(n, m, pole, sX+2, sY+1, kX, kY);
}
if (!istnieje && sX < n-2 && sY > 0) {
istnieje = szukaj(n, m, pole, sX+2, sY-1, kX, kY);
}
if (!istnieje && sX > 1 && sY < m-1) {
istnieje = szukaj(n, m, pole, sX-2, sY+1, kX, kY);
}
if (!istnieje && sX > 1 && sY > 0) {
istnieje = szukaj(n, m, pole, sX-2, sY-1, kX, kY);
}
}
}
return istnieje;
}
int main () {
int n, m;
cout << "Podaj liczbę wierszy n: ";
cin >> n;
cout << "Podaj liczbę kolumn m: ";
cin >> m;
int **pole;
/* Alokowanie potrzebnej pamięci */
pole = (int**)malloc(n*m*sizeof(int*));
for(int i=0; i<n; i++)
pole[i] = (int*)malloc(m*sizeof(int));
/* Wprowadzanie liczb na pole */
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
cin >> pole[i][j];
}
}
/* Wprowadzanie pozycji początkowej i końcowej zająca */
int startX, startY, koniecX, koniecY;
cout << "Podaj położenie początkowe: ";
cin >> startX >> startY;
cout << "Podaj położenie końcowe: ";
cin >> koniecX >> koniecY;
/* Sprawdzanie czy zając dojdzie do końca */
bool wartosc = szukaj(n, m, pole, startX, startY, koniecX, koniecY);
if (wartosc==true) {
cout << "Istnieje droga\n";
}
else {
cout << "Droga nie istnieje\n";
}
/* Zwalnianie pamieci */
for(int i=0; i<n; i++)
free(pole[i]);
free(pole);
return 0;
}