Pagini recente » Cod sursa (job #881253) | Cod sursa (job #2286733) | Cod sursa (job #991981) | Cod sursa (job #1922549) | Cod sursa (job #1887484)
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("barbar.in");
ofstream fout("barbar.out");
const int N=101;
int x[10001],y[100001],a[N][N],n,m,r,k,f1,f2;
int dist(int i,int j)
{
int mn=10000000;
for(int h=1;h<=k;h++)
{
long long d=abs(x[h]-i)+abs(y[h]-j)+1;
//cout<<d<<" ";
if(mn>d)mn=d;
}//cout<<endl<<mn<<endl;
return mn;
}
void par(int i, int j, int mn)
{
if(a[i][j]==1||a[i][j]==2||a[i][j]==4||a[i][j]==9)return;
if(i>n||i<1||j>m||j<1||(i==f1&&j==f2)){
r=mn;
return;
}
a[i][j]=9;
if(dist(i,j)<mn)mn=dist(i,j);
par(i,j+1,mn);
par(i,j-1,mn);
par(i-1,j,mn);
par(i+1,j,mn);
}
int main()
{
int i,j,st1,st2;
char c;
fin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fin>>c;
if(c=='.')a[i][j]=0;
if(c=='*')a[i][j]=1;
if(c=='D')
{
x[++k]=i;
y[k]=j;
a[i][j]=2;
}
if(c=='I')
{
st1=i;
st2=j;
a[i][j]=3;
}
else if(c=='F')
{
f1=i;
f2=j;
a[i][j]=4;
}
}
}
par(st1,st2,100000);
fout<<r;
return 0;
}