Cod sursa(job #696164)
//Harta unui oras este codificata intr-o matrice n*m cu valori de 0 si 1
//0 reprezentand strazile poziti accesibile iar 1 repre. cladirile zone inacesibile
//In pozitia ir jr(libera) se gaseste romeo
//iar in pozitia ij jj(libera) se gaseste julieta
//Sa se determine nr min de pasi(de pozitii) pe care trebuie sa-i faca romeo ca
//sa ajunga la julieta mergand doar pe poziii 0(libere)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin ( "rj.in" );
ofstream fout ( "rjout" );
int main ()
{
int n, m, i, j, a[100][100], pas, ir, jr, ij, jj;
fin >> n >> m >> ir >> jr >> ij >> jj;
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= m; j++ )
fin >> a[i][j];
a[ir][jr] = 1;
pas = 1;
while ( a[ij][jj] == 0 )
{
for ( i = 1; i <= n; i++ )
for( j = 1; j <= m; j++ )
if ( a[i][j] == pas )
{
if ( a[i][j-1] == 0 )
a[i][j-1] = pas + 1;
if ( a[i][j+1] == 0 )
a[i][j+1] = pas + 1;
if ( a[i-1][j] == 0 )
a[i-1][j] = pas + 1;
if ( a[i+1][j] == 0 )
a[i+1][j] = pas + 1;
}
pas++;
}fout << pas-1 << " " << endl;
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= m; j++ )
fout << a[i][j] << " ";
fout << endl;
}
fin.close();
fout.close();
return 0;
}