Pagini recente » Cod sursa (job #2787146) | Cod sursa (job #3143957) | Cod sursa (job #1679775) | Cod sursa (job #492244) | Cod sursa (job #1585603)
#include <iostream>
#include <fstream>
using namespace std;
struct codix
{
int l,c;
};
codix coada[1000000];
int a[1001][1001],b[1001][1001],m,n,pl,pc,cl,cc,dx[4]= {-1,0,1,0},dy[4]= {0,1,0,-1},ck;
void fill (int i, int j, int xx, int yy)
{
int lx,cx;
b[i][j]=yy;
for(int k=0; k<4; k++)
{
lx=i+dx[k];
cx=j+dy[k];
if(lx>0&&cx>0&&lx<=n&&cx<=m&&b[lx][cx]!=yy&&a[lx][cx]>=xx)
fill(lx,cx,xx,yy);
}
}
bool check (int val)
{
ck--;
fill(pl,pc,val,ck);
if(b[cl][cc]==ck)
return true;
return false;
}
int main()
{
ifstream fin ("barbar.in");
ofstream fout ("barbar.out");
int i,j,sf=0,ic,x,y,pas;
char c;
fin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
fin>>c;
if(c=='.')
a[i][j]=0;
if(c=='*')
a[i][j]=-2;
if(c=='D')
{
a[i][j]=0;
sf++;
coada[sf].l=i;
coada[sf].c=j;
}
if(c=='I')
{
pl=i;
pc=j;
a[i][j]=-3;
}
if(c=='O')
{
cl=i;
cc=j;
a[i][j]=1025;
}
}
ic=1;
while(ic<=sf)
{
ic++;
for(i=0; i<4; i++)
{
x=coada[ic].l+dx[i];
y=coada[ic].c+dy[i];
if(ic==1)
cout<<x<<" "<<y<<" "<<a[x][y]<<" "<<ic<<" "<<sf<<"\n";
if(x>0&&y>0&&x<=n&&y<=m&&a[x][y]==0)
{
sf++;
coada[sf].l=x;
coada[sf].c=y;
a[x][y]=a[coada[ic].l][coada[ic].c]+1;
}
}
}
i=0;
pas=1<<10;
while(pas!=0)
{
if(check(i+pas)==1)
i+=pas;
pas/=2;
}
fout<<i-1;
return 0;
}