Pagini recente » Cod sursa (job #2948466) | Cod sursa (job #2192145) | Arhiva de probleme | Cod sursa (job #141946) | Cod sursa (job #2923964)
#include <fstream>
using namespace std;
ifstream f("barbar.in");
ofstream g("barbar.out");
int r,c,sx,sy,fx,fy,d[1001][1001],n;
char l;
bool p[1001][1001],ok;
int main()
{ f>>r>>c;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{ f>>l;
switch(l){
case 'I':
sx=i;
sy=j;
break;
case 'O':
fx=i;
fy=j;
break;
case 'D':
d[i][j]=1;
break;
case '*':
d[i][j]=-1;
break;
}
}
ok=1;
n=1;
while(ok)
{ ok=0;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{ if(d[i][j]>0&&d[i][j]==n)
{ if(d[i+1][j]==0)d[i+1][j]=d[i][j]+1,ok=1;
if(d[i][j+1]==0)d[i][j+1]=d[i][j]+1,ok=1;
if(d[i-1][j]==0)d[i-1][j]=d[i][j]+1,ok=1;
if(d[i][j-1]==0)d[i][j-1]=d[i][j]+1,ok=1;
}
}
n++;
/*
for(int i=1;i<=r;i++)
{ for(int j=1;j<=c;j++)cout<<d[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';*/
}
p[sx][sy]=1;
ok=1;
while(n>=2)
{ ok=0;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{ if(p[i][j]==1)
{ if(d[i+1][j]>=n&&p[i+1][j]==0)p[i+1][j]=1,ok=1;
if(d[i][j+1]>=n&&p[i][j+1]==0)p[i][j+1]=1,ok=1;
if(d[i-1][j]>=n&&p[i-1][j]==0)p[i-1][j]=1,ok=1;
if(d[i][j-1]>=n&&p[i][j-1]==0)p[i][j-1]=1,ok=1;
}
}
if(ok==0)n--;
/*
for(int i=1;i<=r;i++)
{ for(int j=1;j<=c;j++)cout<<p[i][j]<<' ';
cout<<'\n';
}
cout<<'\n'<<n<<'\n';
for(int i=1;i<=r;i++)
{ for(int j=1;j<=c;j++)cout<<d[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';
*/
if(p[fx][fy]==1)
{ g<<n-1;
return 0;
}
}
g<<-1;
return 0;
}