Pagini recente » Cod sursa (job #480087) | Cod sursa (job #1344077) | Cod sursa (job #2829201) | Cod sursa (job #855284) | Cod sursa (job #1159424)
#include<fstream>
using namespace std;
int n, m, i, j, x1, x2, y1, y2, ic, jc, iv, jv, d, c[3][1000003], a[1003][1003], p, u, u1, p1, b[1003][1003], ic1, jc1, iv1, jv1, d1, mij;
int di[5]={1, -1, 0, 0};
int dj[5]={0, 0, 1, -1};
char ch;
int verif(int x){
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
b[i][j]=0;
u1=0;
p1=0;
c[0][++u1]=x1;
c[1][1]=y1;
p1=1;
while(p1<=u1 && b[x2][y2]==0){
ic1=c[0][p1];
jc1=c[1][p1];
for(d1=0; d1<=3; d1++){
iv1=ic1+di[d1];
jv1=jc1+dj[d1];
if(iv1>=1 && iv1<=n && jv1>=1 && jv1<=m && a[ic1][jc1]>=x && a[iv1][jv1]>=x && b[iv1][jv1]==0){
c[0][++u1]=iv1;
c[1][u1]=jv1;
b[iv1][jv1]=1;
}
}
p1++;
}
if(b[x2][y2]==1)
return 1;
return 0;
}
ifstream in("barbar.in");
ofstream out("barbar.out");
int main(){
in>>n>>m;
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
in>>ch;
if(ch=='.')
a[i][j]=0;
if(ch=='*')
a[i][j]=-1;
if(ch=='D'){
a[i][j]=-2;
c[0][++u]=i;
c[1][u]=j;
}
if(ch=='I'){
a[i][j]=0;
x1=i;
y1=j;
}
if(ch=='O'){
a[i][j]=0;
x2=i;
y2=j;
}
}
}
p=1;
while(p<=u){
ic=c[0][p];
jc=c[1][p];
for(d=0; d<=3; d++){
iv=ic+di[d];
jv=jc+dj[d];
if(iv>=1 && iv<=n && jv>=1 && jv<=m && (a[iv][jv]==0 || a[ic][jc]+1<a[iv][jv])){
c[0][++u]=iv;
c[1][u]=jv;
if(a[ic][jc]==-2)
a[iv][jv]=1;
else
a[iv][jv]=a[ic][jc]+1;
}
}
p++;
}
//for(i=1; i<=n; i++){
//for(j=1; j<=m; j++){
//out<<a[i][j]<<" ";
//}
//out<<"\n";
//}
p=1; u=n+m;
while(p<=u){
//out<<1<<" ";
mij=p+(u-p)/2;
if(verif(mij))
p=mij+1;
else
u=mij-1;
}
out<<u;
return 0;
}