Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- // PRE_p=(N ha m*m valori definiti, 0<=i<=m e P ha m elementi)
- bool partenza(bool *N, int m, int i, int *P);
- /* POST_p=(risponde true sse esiste un cammino di caselle bianche dalla prima all’ultima riga di N,
- vista come X[m][m], e che inizia in una casellatra i e m-1 della prima riga di X)
- &&(se risponde trueallora P[0..m-1] è il cammino più a sinistra con queste proprietà)
- */
- // PRE_t=(N ha almeno m*m elementi definiti, 0<=i<m, j è definitoe P ha m-i posizioni)
- bool trova(bool *N, int m, int i, int j, int *P);
- /* POST_t=(restituisce true sse in N vista come X[m][m] c’è un cammino dalla casella(i,j) alla riga m-1 composto da sole caselle bianche)
- &&(se la risposta è true,in P [0..m-i-1] c’è il cammino più a sinistra con queste proprietà)*/
- void stampa(int *P, int m, int i)
- {
- if (i == m)
- {
- cout << endl;
- return;
- }
- cout << '(' << i << ',' << P[i] << ')' << ' ';
- stampa(P, m, i + 1);
- }
- main()
- {
- int m;
- cin >> m;
- int *P = new int[m];
- bool *N = new bool[m * m];
- for (int i = 0; i < m * m; i++)
- cin >> N[i];
- bool x = partenza(N, m, 0, P); //da fare
- cout << "start" << endl;
- if (x)
- {
- cout << "esiste un cammino e quello più a sinistra è:" << endl;
- stampa(P, m, 0);
- }
- else
- cout << "il cammino non esiste" << endl;
- cout << "end" << endl;
- }
- bool partenza(bool *N, int m, int i, int *P)
- {
- if (trova(N, m, 0, i, P))
- {
- return true;
- }
- else if (i == m - 1 && !trova(N, m, 0, i, P))
- {
- return false;
- }
- return partenza(N, m, i + 1, P);
- }
- bool trova(bool *N, int m, int i, int j, int *P)
- {
- if (*(N + (i * m) + j))
- {
- P[i] = j;
- }
- else
- {
- return false;
- }
- if (i == (m - 1)) // controllo che conclude la ricorsione
- {
- return true;
- }
- return trova(N, m, i + 1, j - 1, P) || trova(N, m, i + 1, j, P) || trova(N, m, i + 1, j + 1, P);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement