Cod sursa(job #66299)

Utilizator DastasIonescu Vlad Dastas Data 17 iunie 2007 17:11:35
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#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;
}