Pagini recente » Cod sursa (job #55496) | Cod sursa (job #1332132) | Cod sursa (job #2774182) | Cod sursa (job #287235) | Cod sursa (job #434202)
Cod sursa(job #434202)
#include<fstream>
using namespace std;
ifstream f("barbar.in");
ofstream g("barbar.out");
const int dab[4]={0,1,0,-1};
const int dor[4]={1,0,-1,0};
char v[1001][1001];
int n,m,dist[1001][1001],c[1001][1001],inc=1,a1,b1,a=1,b;
struct bfs
{
int absc,ordon;
}t[1002001],x,y;
void dragon()
{
int i;
while(a<=b)
{
x=t[a++];
for(i=0;i<4;i++)
{
y.absc=x.absc+dab[i];
y.ordon=x.ordon+dor[i];
if(v[y.absc][y.ordon]=='.'&&(dist[y.absc][y.ordon]==0||dist[y.absc][y.ordon]>dist[x.absc][x.ordon]+1))
{
dist[y.absc][y.ordon]=dist[x.absc][x.ordon]+1;
t[++b]=y;
}
}
}
}
int lee(int d)
{
int a=1,b=1,i;
t[1].absc=a1;
t[1].ordon=b1;
while(a<=b)
{
x=t[a++];
for(i=0;i<4;i++)
{
y.absc=x.absc+dab[i];
y.ordon=x.ordon+dor[i];
if(v[y.absc][y.ordon]=='.'&&dist[y.absc][y.ordon]>=d&&c[y.absc][y.ordon]<inc)
{
c[y.absc][y.ordon]=inc;
t[++b]=y;
}
if(v[y.absc][y.ordon]=='O')
return 1;
}
}
inc++;
return 0;
}
int caut()
{
int i;
for(i=n;i>=0;i--)
if(lee(i))
return i;
return -1;
}
int main()
{
int i,j;
f>>n>>m;
for(i=0;i<n;i++)
{
f>>v[i];
for(j=1;j<=m;j++)
{
if(v[i][j]=='I')
{
a1=i;
b1=j;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(v[i][j]=='D')
{
b++;
t[b].absc=i;
t[b].ordon=j;
}
}
}
dragon();
g<<caut();
return 0;
}