Pagini recente » Cod sursa (job #2760401) | Cod sursa (job #1248366) | Cod sursa (job #1331184) | Cod sursa (job #2858353) | Cod sursa (job #1854952)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("sume2.in");
ofstream g("sume2.out");
int n,m,i,j,v[1001][1001],pas,L,r,k,i1,i2,j1,j2,i3,j3;
char c;
bool drum(int dist)
{
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
f>>c;
if(c=='*') v[i][j]=-1;
else if(c=='D') v[i][j]=-2;
else if(c=='0') v[i][j]=-3,i3=i,j3=j;
else if(c=='I') i1=i, j1=j;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(v[i][j]==-2)
{
for(i2=i-1;i2>=1 && v[i2][j]!=-1;i2--) if(v[i2][j]<=0 || v[i2][j]>i-i2) v[i2][j]=i-i2;
for(i2=i+1;i2<=n && v[i2][j]!=-1;i2++) if(v[i2][j]<=0 || v[i2][j]>i2-i)v[i2][j]=i2-i;
for(j2=j-1;j2>=1 && v[i][j2]!=-1;j2--) if(v[i][j2]<=0 || v[i][j2]>j-j2)v[i][j2]=j-j2;
for(j2=j+1;j2<=m && v[i][j2]!=-1;j2++) if(v[i][j2]<=0 || v[i][j2]>j2-j)v[i][j2]=j2-j;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
if(v[i][j]>=0) cout<<v[i][j]<<" ";
else cout<<v[i][j]<<' ';
cout<<'\n';
}
L=9;
pas=1<<L;
if(v[i3][j3]>0) r=v[i3][j3]-1;
else r=0;
while(pas)
{
if(drum(r+pas)) r+=pas;
pas/=2;
}
return 0;
}