Informatică, întrebare adresată de meshnik, 8 ani în urmă

Ajutați-mă vă rog să elaborez un program în c++ după următoarea condiție

Anexe:

rares256: Presupun ca poate fi parcurs si e diagonala
rares256: pe*

Răspunsuri la întrebare

Răspuns de rares256
0

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:

Alte întrebări interesante