Cod sursa(job #1845256)

Utilizator Walrus21andrei Walrus21 Data 11 ianuarie 2017 06:04:40
Problema Barbar Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#define N 2001

using namespace std;

struct ps
{
    int l;
    int c;
};

int i, j, n, m, p, u, nmx, D[N][N];
ps pi, pf, v, C[N * N];
int dl[] ={-1, 0, 1, 0}, dc[] = {0, 1, 0, -1};
bool ok, o[N][N];
char c;

void mx(ps pi, int r)
{
    if(pi.l == pf.l && pi.c == pf.c) ok = 1;
    o[pi.l][pi.c] = 1;
    for(int k = 0; k < 4; k++)
    {
        v.l = pi.l + dl[k];
        v.c = pi.c + dc[k];
        if(!o[v.l][v.c] && D[v.l][v.c] >= r)
            mx(v, r);
    }
}

int main()
{
    freopen("barbar.in", "r", stdin);
    freopen("barbar.out", "w", stdout);
    scanf("%d%d\n", &n, &m);
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= m; j++)
        {
            scanf("%c", &c);
            if(c == '*')
                D[i][j] = -1;
            else if(c == 'D')
            {
                u++;
                C[u].l = i;
                C[u].c = j;
                D[i][j] = 1;
            }
            else
                if(c == 'I')
                {
                    pi.l = i;
                    pi.c = j;
                }
            else
                if(c == 'O')
                {
                    pf.l = i;
                    pf.c = j;
                }
        }
        scanf("\n");

    }
    printf("%d\n", nmx - 1);
    return 0;
}