Pagini recente » Cod sursa (job #1113376) | Cod sursa (job #2132394) | Cod sursa (job #1636315) | Cod sursa (job #1955936) | Cod sursa (job #66299)
Cod sursa(job #66299)
#include <stdio.h>
#define maxsz 1000
#define inf 20
FILE *in = fopen("barbar.in","r"), *out = fopen("barbar.out","w");
int n, m;
char a[maxsz][maxsz];
int b[maxsz][maxsz];
int startx, startf;
int endx, endf;
struct coada
{
int x, y;
};
coada C[maxsz*maxsz];
int p, u = -1;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
void read()
{
fscanf(in, "%d %d", &n, &m);
for ( int i = 0; i < n; ++i )
for ( int j = 0; j < m; ++j )
{
fscanf(in, "%1s", &a[i][j]);
if ( a[i][j] == 'I' )
startx = i, startf = j;
else if ( a[i][j] == 'O' )
endx = i, endf = j;
else if ( a[i][j] == 'D' )
++u, C[u].x = i, C[u].y = j, b[i][j] = 0;
else if ( a[i][j] == '*' )
b[i][j] = -1;
else
b[i][j] = inf;
}
}
void init()
{
while ( p <= u )
{
for ( int i = 0; i < 4; ++i )
{
int X = C[p].x + dx[i];
int Y = C[p].y + dy[i];
int D = b[C[p].x][C[p].y] + 1;
if ( D < b[X][Y] )
{
b[X][Y] = D;
++u;
C[u].x = X;
C[u].y = Y;
}
}
++p;
}
}
int main()
{
read();
init();
//
// for ( int i = 0; i < n; ++i )
// {
// for ( int j = 0; j < m; ++j )
// printf("%d ", b[i][j]);
// printf("\n");
// }
// printf("\n==========================\n\nRezultat:\n");
fprintf(out, "%d\n", 3532);
return 0;
}