Pagini recente » Cod sursa (job #2013907) | Cod sursa (job #1275832) | Cod sursa (job #869554) | Cod sursa (job #489744) | Cod sursa (job #2106780)
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <deque>
using namespace std;
int n,m,Mem[1005][1005],DistDrag[1005][1005];
char aux;
int linie,coloana,aux1;
int pornirel,pornirec,iesirel,iesirec;
int linieaux,coloanaaux;
deque < pair < int, int > > decoada;
void umplere(int,int);
int main()
{
cin>>n>>m;
for (linie=1;linie<=n;linie++)
for (coloana=1;coloana<=m;coloana++)
DistDrag[linie][coloana]=999999;
for (linie=1;linie<=n;linie++)
for (coloana=1;coloana<=m;coloana++)
{
cin>>aux;
if (aux=='I')
{
pornirel=linie;
pornirec=coloana;
}
else if (aux=='O')
{
iesirel=linie;
iesirec=coloana;
}
else if (aux=='D')
{
umplere(linie,coloana);
DistDrag[linie][coloana]=0;
}
else if (aux=='*')
Mem[linie][coloana]=9999999;
}
for (linie=1;linie<=n;linie++)
{
for (coloana=1;coloana<=m;coloana++)
cout<<DistDrag[linie][coloana]<<" ";
cout<<"\n";
}
}
void umplere(int linieD,int coloanaD)
{
int stl,sfl,stc,sfc,i,d;
stl=linieD-1;
sfl=linieD+1;
stc=coloanaD-1;
sfc=coloanaD+1;
d=1;
while (stl>=1||sfl<=n||stc>=1||sfc<=m)
{
stl=max(1,stl);
sfl=min(n,sfl);
stc=max(1,stc);
sfc=min(m,sfc);
for (i=stc;i<=sfc;i++)
DistDrag[stl][i]=min(DistDrag[stl][i],d);
for (i=stl;i<=sfl;i++)
DistDrag[i][stc]=min(DistDrag[i][stc],d);
for (i=stc;i<=sfc;i++)
DistDrag[sfl][i]=min(DistDrag[sfl][i],d);
for (i=stl;i<=sfl;i++)
DistDrag[i][sfc]=min(DistDrag[i][sfc],d);
d++;
stl--;
sfl++;
stc--;
sfc++;
}
}