Pagini recente » Cod sursa (job #1129300) | Cod sursa (job #1534670) | Cod sursa (job #2793524) | Cod sursa (job #2611207) | Cod sursa (job #1750867)
#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)
{
if(aux[i][j] == -1) continue;
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;
}