Ajutați-mă vă rog să elaborez un program în c++ după următoarea condiție
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;
ifstream fin ("date.in");
///am adaugat un fisier pentru a simplifica testarea
int ma[100][100], n, m, i, j;
int startx, starty, finalx, finaly;
struct lc
{
int l;
int c;
}q;
queue < lc > Q;
void Lee (int startx, int starty, int finalx, int finaly)
{
Q.push( {startx, starty} );
while(!Q.empty() && ma[finalx][finaly] == 0)
{
q = Q.front();
int i = q.l;
int j = q.c;
if(ma[i][j + 1] == 0)
ma[i][j + 1] = ma[i][j] + 1, Q.push( {i, j + 1} );
if(ma[i - 1][j] == 0)
ma[i - 1][j] = ma[i][j] + 1, Q.push( {i - 1, j} );
if(ma[i][j - 1] == 0)
ma[i][j - 1] = ma[i][j] + 1, Q.push( {i, j - 1} );
if(ma[i + 1][j] == 0)
ma[i + 1][j] = ma[i][j] + 1, Q.push( {i + 1, j} );
Q.pop();
}
}
int main()
{
n = 8;
m = 10; ///in cazul in care doresti sa ai o matrice de alte dimensiuni trebuie sa citesti pe n, m
///dar cum tie ti se da un labirint, am presupun ca este marimea ceruta
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
fin >> ma[i][j]; ///citim matrice cu 0 sau -1, -1 ptr casute pe care nu poate merge
for(i = 0; i <= n + 1; i++)
ma[i][0] = -1, ma[i][m + 1] = -1;
for(j = 0; j <= m + 1; j++) ///incadrez matricea intr-o casute de elemente -1
ma[0][j] = -1, ma[n + 1][j] = -1;
ma[startx][starty] = 1;
Lee(1, 1, n, m); ///algoritmul lui Lee
cout << ma[n][m] - 1; ///nr total de pasi
return 0;
}
Explicație: