Cod sursa(job #2106780)

Utilizator Monstergentleman35Ciopraga Razvan Monstergentleman35 Data 16 ianuarie 2018 10:53:17
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#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++;
 }
}