Pagini recente » Cod sursa (job #533967) | Cod sursa (job #2773487) | Cod sursa (job #359518) | Cod sursa (job #1821149) | Cod sursa (job #1845341)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#define NMAX 1007
using namespace std;
struct ps
{
int l;
int c;
};
int i, j, n, m, pil, pic, pfl, pfc, p, u, l ,r, mid, nmx, D[NMAX][NMAX];
ps pi, pf, v, C[NMAX * NMAX];
int dl[] ={-1, 0, 1, 0}, dc[] = {0, 1, 0, -1};
bool ok, o[NMAX][NMAX];
char c;
void mx(int pii, int pij, int rr)
{
int vvi, vvj;
o[pii][pij] = 1;
p = u = 1;
memset(C, 0, sizeof(C));
C[1].l = pii;
C[1].c = pij;
while(p <= u)
{
if(C[p].l == pfl && C[p].c == pfc) {ok = 1; break;}
for(int k = 0; k < 4; k++)
{
vvi = C[p].l + dl[k];
vvj = C[p].c + dc[k];
if(!o[vvi][vvj] && D[vvi][vvj] >= rr)
{
u++;
C[u].l = vvi;
C[u].c = vvj;
o[vvi][vvj] = 1;
}
}
p++;
}
}
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')
{
pil = i;
pic = j;
}
else
if(c == 'O')
{
pfl = i;
pfc = j;
}
}
scanf("\n");
}
for(i = 1; i <= m; i++)
D[0][i] = D[n + 1][i] = -1;
for(i = 1; i <= n; i++)
D[i][0] = D[i][m + 1] = -1;
while(p++ <= u)
for(int k = 0; k < 4; k++)
{
v.l = C[p].l + dl[k];
v.c = C[p].c + dc[k];
if(!D[v.l][v.c])
{
D[v.l][v.c] = D[C[p].l][C[p].c] + 1;
C[++u] = v;
}
}
l=1; r=n*m;
printf("%d\n", nmx - 1);
return 0;
}