Pagini recente » Cod sursa (job #1492892) | Cod sursa (job #2878168) | Cod sursa (job #2981240) | Cod sursa (job #1599632) | Cod sursa (job #2146837)
#include <bits/stdc++.h>
using namespace std;
ifstream in("barbar.in");
ofstream out("barbar.out");
#define N 1001
int a[N][N];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int n,m;
bool b[1001][1001];
bool c[1001][1001];
int q[N*N][2];
int x,y,x2,y2;
void fil(int i, int j,int k){
if(i<1 || i>n || j<1 || j>m || a[i][j]<k || c[i][j]);
else{
c[i][j]=1;
if(i==x2 && j==y2)
return;
fil(i+1,j,k);
fil(i,j+1,k);
fil(i-1,j,k);
fil(i,j-1,k);
}
}
int main(){
int i,j;
cin>>n>>m;
int u=0, p=0;
char ch;
for(i=1; i<=n; ++i){
for(j=1; j<=m; ++j){
cin>>ch;
switch(ch){
case 'I': x=i, y=j; break;
case 'O': x2=i, y2=j; break;
case '*': a[i][j]=-1, b[i][j]=1; ; break;
case 'D': q[++u][0]=i, q[u][1]=j, a[i][j]=1; break;
}
}
}
for(i=1; i<=n; ++i)
a[0][i]=a[n+1][i]=-1;
for(i=1; i<=m; ++i)
a[i][0]=a[i][m+1]=-1;
int c1,c2,v1,v2;
int maxx=0;
while(p<=u){
c1=q[++p][0];
c2=q[p][1];
for(i=0; i<4; ++i){
v1=c1+dx[i];
v2=c2+dy[i];
if(!a[v1][v2]){
a[v1][v2]=a[c1][c2]+1;
maxx=max(maxx,a[v1][v2]);
q[++u][0]=v1;
q[u][1]=v2;
}
}
}
int k;
for(i=maxx; i>=2; --i){
for(j=1; j<=n; ++j)
for(k=1; k<=m; ++k)
c[j][k]=b[j][k];
fil(x,y,i);
if(c[x2][y2]){
cout<<i-1;
return 0;
}
}
}