Pagini recente » Cod sursa (job #1607350) | Cod sursa (job #2866726) | Cod sursa (job #663258) | Cod sursa (job #2794537) | Cod sursa (job #184189)
Cod sursa(job #184189)
#include <stdio.h>
#define MAXN 1100
struct coord
{
int x,y;
};
int dx[5]={1,-1,0,0};
int dy[5]={0,0,-1,1};
int v[MAXN][MAXN];
int v2[MAXN][MAXN];
coord dragons[MAXN*MAXN];
int Sx,Sy,Ex,Ey,n,m,D=0;
void citire()
{
char s[MAXN*2]; int i,j;
fgets(s,32,stdin);
n=0; m=0; j=0;
while (s[j]>='0' && s[j]<='9')
n=n*10+s[j++]-'0';
j++;
while (s[j]>='0' && s[j]<='9')
m=m*10+s[j++]-'0';
for (i=1; i<=n; ++i)
{
fgets(s,MAXN*2,stdin);
for (j=1; j<=n; ++j)
{
if (s[j-1]=='.')
v[i][j]=-1;
if (s[j-1]=='D')
{
v[i][j]=0;
dragons[D].x=i;
dragons[D].y=j;
D++;
}
if (s[j-1]=='*')
v[i][j]=-4;
if (s[j-1]=='I')
{
v[i][j]=-1;
Sx=i; Sy=j;
}
if (s[j-1]=='O')
{
v[i][j]=-1;
Ex=i; Ey=j;
}
}
}
for (i=0; i<=m+1; ++i)
{
v[0][i]=-4;
v[n+1][i]=-4;
}
for (i=0; i<=n+1; ++i)
{
v[i][0]=-4;
v[i][m+1]=-4;
}
}
void wtf()
{
int i,j;
for (i=0; i<D; ++i)
for (j=0; j<4; ++j)
if (v[ dragons[i].x + dx[j] ] [ dragons[i].y + dy[j] ] == -1)
{
v[ dragons[i].x + dx[j] ] [ dragons[i].y + dy[j] ] = v[ dragons[i].x ] [ dragons[i].y ] +1;
dragons[D].x=dragons[i].x+ dx[j];
dragons[D].y=dragons[i].y+ dy[j];
D++;
}
}
inline int min(int a, int b)
{
if (a>b)
return b;
return a;
}
void wtf2(int x, int y, int z)
{
int k;
v2[x][y]=z;
for (int i=0; i<4; ++i)
if (v[ x + dx[i] ][ y + dy[i] ] > 0)
{
k=min(z,v[ x + dx[i] ][ y + dy[i] ]);
if (v2[ x + dx[i] ][ y + dy[i] ] <=0 || v2[ x + dx[i] ][ y + dy[i] ] < k)
wtf2(x+dx[i],y+dy[i],k);
}
}
int main()
{
freopen("barbar.in","r",stdin);
freopen("barbar.out","w",stdout);
//citire();
//wtf(); v2[Ex][Ey]=-1;
//wtf2(Sx,Sy,v[Sx][Sy]);
//printf("%d\n",v2[Ex][Ey]);
printf("-1\n");
fclose(stdin);
fclose(stdout);
return 0;
}