//ALgoritmul lui Lee sau pe coada
//n si m matrice pt A
// pe urmatoarele n linii sunt cate m cifre de 0 sau 1 = imaginea codificata a unui labirint
//pe ultima linie se afla coordonatele unui punct de start . Se cere sa se d cea mai scurta intre p de start si oricare alt punct din labirint
#include <iostream>
#include <fstream>
//punem 1 in casuta de start,la vecini punem k+1 si tot asa
using namespace std;
int n=10 , m=10,xi=7,yi=3;
int a[50][50]=
{
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,1,1,1,1,0,0,0},
{0,1,0,1,0,0,1,0,0,0},
{0,1,0,1,1,1,1,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,1,1,1},
{0,0,0,0,0,0,1,0,0,0}
};
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
void citire()
{
int i,j;
ifstream in("date.in");
in >> n >>m;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
in >> a[i][j];
in >> xi >> yi;
}
int bun(int ii,int jj)
{
return ii>=0 && ii<n && jj>=0 && jj<m;
}
void Lee()
{
int cx[100],cy[100],pi,ps,i,j;
int k,ii,jj;
pi=0;
ps=0;
cx[0]=xi;
cy[0]=yi;
while(pi<=ps)
{
i=cx[pi];
j=cy[pi];
for(k=0; k<4; k++)
{
ii=i+dx[k];
jj=j+dy[k];
if (bun(ii,jj))
if (a[ii][jj]==0)
{
a[ii][jj]=a[i][j]+1;
ps++;
cx[ps]=ii;
cy[ps]=jj;
}
}
pi++;
}
}
void afisare()
{
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
cout << a[i][j]<<"\t";
cout << endl;
}
}
int main()
{
//citire();
a[xi][yi]=1;
Lee();
afisare();
return 0;
}
Ly9BTGdvcml0bXVsIGx1aSBMZWUgc2F1IHBlIGNvYWRhCi8vbiBzaSBtIG1hdHJpY2UgcHQgQQovLyBwZSB1cm1hdG9hcmVsZSBuIGxpbmlpIHN1bnQgY2F0ZSBtIGNpZnJlIGRlIDAgc2F1IDEgPSBpbWFnaW5lYSBjb2RpZmljYXRhIGEgdW51aSBsYWJpcmludAovL3BlIHVsdGltYSBsaW5pZSBzZSBhZmxhIGNvb3Jkb25hdGVsZSB1bnVpIHB1bmN0IGRlIHN0YXJ0IC4gU2UgY2VyZSBzYSBzZSBkIGNlYSBtYWkgc2N1cnRhIGludHJlIHAgZGUgc3RhcnQgc2kgb3JpY2FyZSBhbHQgcHVuY3QgZGluIGxhYmlyaW50CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZzdHJlYW0+Ci8vcHVuZW0gMSBpbiBjYXN1dGEgZGUgc3RhcnQsbGEgdmVjaW5pIHB1bmVtIGsrMSBzaSB0b3QgYXNhCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbj0xMCAsIG09MTAseGk9Nyx5aT0zOwppbnQgYVs1MF1bNTBdPQp7CiAgICB7MCwwLDAsMCwwLDAsMCwwLDAsMH0sCiAgICB7MCwxLDAsMCwwLDAsMCwwLDAsMH0sCiAgICB7MCwxLDAsMSwxLDEsMSwwLDAsMH0sCiAgICB7MCwxLDAsMSwwLDAsMSwwLDAsMH0sCiAgICB7MCwxLDAsMSwxLDEsMSwwLDAsMH0sCiAgICB7MCwxLDAsMCwwLDAsMCwwLDAsMH0sCiAgICB7MCwxLDEsMSwxLDEsMSwwLDAsMH0sCiAgICB7MCwwLDAsMCwwLDAsMCwwLDAsMH0sCiAgICB7MCwwLDAsMCwwLDAsMSwxLDEsMX0sCiAgICB7MCwwLDAsMCwwLDAsMSwwLDAsMH0KCn07CmNvbnN0IGludCBkeFs0XT17LTEsMCwxLDB9Owpjb25zdCBpbnQgZHlbNF09ezAsMSwwLC0xfTsKCnZvaWQgY2l0aXJlKCkKewogICAgaW50IGksajsKICAgIGlmc3RyZWFtIGluKCJkYXRlLmluIik7CiAgICBpbiA+PiBuID4+bTsKICAgIGZvciAoaT0wO2k8bjtpKyspCiAgICAgICAgZm9yIChqPTA7ajxtO2orKykKICAgICAgICBpbiA+PiBhW2ldW2pdOwogICAgaW4gPj4geGkgPj4geWk7Cn0KCmludCBidW4oaW50IGlpLGludCBqaikKewogICAgcmV0dXJuIGlpPj0wICYmIGlpPG4gJiYgamo+PTAgJiYgamo8bTsKfQoKdm9pZCBMZWUoKQp7CiAgICBpbnQgY3hbMTAwXSxjeVsxMDBdLHBpLHBzLGksajsKICAgIGludCBrLGlpLGpqOwogICAgcGk9MDsKICAgIHBzPTA7CiAgICBjeFswXT14aTsKICAgIGN5WzBdPXlpOwoKICAgIHdoaWxlKHBpPD1wcykKICAgIHsKICAgICAgICBpPWN4W3BpXTsKICAgICAgICBqPWN5W3BpXTsKICAgICAgICBmb3Ioaz0wOyBrPDQ7IGsrKykKICAgICAgICB7CiAgICAgICAgICAgIGlpPWkrZHhba107CiAgICAgICAgICAgIGpqPWorZHlba107CiAgICAgICAgICAgIGlmIChidW4oaWksamopKQogICAgICAgICAgICAgICAgaWYgKGFbaWldW2pqXT09MCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhW2lpXVtqal09YVtpXVtqXSsxOwogICAgICAgICAgICAgICAgICAgIHBzKys7CiAgICAgICAgICAgICAgICAgICAgY3hbcHNdPWlpOwogICAgICAgICAgICAgICAgICAgIGN5W3BzXT1qajsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGkrKzsKICAgIH0KfQoKdm9pZCBhZmlzYXJlKCkKewogICAgaW50IGksajsKICAgIGZvciAoaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgZm9yIChqPTA7ajxtO2orKykKICAgICAgICAgICAgY291dCA8PCBhW2ldW2pdPDwiXHQiOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICAvL2NpdGlyZSgpOwogICAgYVt4aV1beWldPTE7CiAgICBMZWUoKTsKICAgIGFmaXNhcmUoKTsKICAgIHJldHVybiAwOwp9Cg==