Pagini recente » Cod sursa (job #1350518) | Cod sursa (job #1131237) | Cod sursa (job #1097659) | Cod sursa (job #687714) | Cod sursa (job #366317)
Cod sursa(job #366317)
#include<stdio.h>
#define NMAX 1003
#define INFINIT 1000000
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int r,c,i,j,li,ci,lo,co;
char harta[NMAX][NMAX];
int dragon[NMAX][NMAX],barbar[NMAX][NMAX];
void BFSdragon(int lin,int col,int x) {
if(lin<0 || col<0 || lin>=r || col>=c || harta[lin][col]=='*' || dragon[lin][col]<=x)
return;
if(harta[lin][col]=='D') x=0;
dragon[lin][col]=x;
for(int i=0;i<4;i++) BFSdragon(lin+dx[i],col+dy[i],x+1);
}
void BFSbarbar(int lin,int col,int x) {
if(lin<0 || col<0 || lin>=r || col>=r || harta[lin][col]=='*' ||
barbar[lin][col]>=x || barbar[lin][col]==dragon[lin][col]) return;
barbar[lin][col]=x<dragon[lin][col]?x:dragon[lin][col];
for(int i=0;i<4;i++) BFSbarbar(lin+dx[i],col+dy[i],barbar[lin][col]);
}
int main() {
freopen("barbar.in","r",stdin);
freopen("barbar.out","w",stdout);
scanf("%d%d\n",&r,&c);
for(i=0;i<r;i++) fgets(harta[i],NMAX,stdin);
for(i=0;i<r;i++)
for(j=0;j<c;j++) {
dragon[i][j]=INFINIT;
barbar[i][j]=-1;
}
for(i=0;i<r;i++)
for(j=0;j<c;j++)
switch(harta[i][j]) {
case 'D': BFSdragon(i,j,0); break;
case 'I': li=i; ci=j; break;
case 'O': lo=i; co=j; break;
}
BFSbarbar(li,ci,dragon[li][ci]);
printf("%d\n",barbar[lo][co]);
return 0;
}