Cod sursa(job #1750864)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 31 august 2016 12:51:36
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>
#include <vector>

#define in "barbar.in"
#define out "barbar.out"
#define pb push_back
#define NMAX (1000 + 7)
#define NUMAX (1000000 + 7)

using namespace std;
int R, C, aux[NMAX][NMAX], ct, pi, po, dirX[5] = {0, 1, 0, -1, 0}, dirY[5] = {0, 0, 1, 0, -1};
char mat[NMAX][NMAX], drake[NUMAX];
vector <int> adj[NUMAX];

inline void citire()
{
    scanf("%d %d", &R, &C);
    for(int i = 1; i<= R; ++i)
    {
        scanf("%s", mat[i]+1);
    }
}
inline void build()
{
    for(int i = 1; i<= R; ++i)
    {
        for(int j = 1; j<= C; ++j)
        {
            if(mat[i][j] == '.')
            {
                aux[i][j] = ++ct;
                continue;
            }
            if(mat[i][j] == '*')
            {
                aux[i][j] = -1;
                continue;
            }
            if(mat[i][j] == 'I')
            {
                aux[i][j] = ++ct;
                pi = ct;
                continue;
            }
            if(mat[i][j] == 'O')
            {
                aux[i][j] = ++ct;
                po = ct;
                continue;
            }
            if(mat[i][j] == 'D')
            {
                aux[i][j] = ++ct;
                drake[ct] = 1;
            }
        }
    }
}
inline void genGraph()
{
    for(int i = 1; i<= R; ++i)
    {
        for(int j = 1; j<= C; ++j)
        {
            for(int k = 1; k<= 4; ++k)
            {
                int px = i + dirX[k], py = j + dirY[k];
                if(aux[px][py] == -1) continue;
                adj[aux[i][j]].pb(aux[px][py]);
            }
        }
    }
}

int main()
{
    freopen(in, "r", stdin);
    freopen(out, "w", stdout);
    citire();
    build();
    genGraph();
    return 0;
}