Pagini recente » Cod sursa (job #964400) | Cod sursa (job #1901109) | Cod sursa (job #2601777)
#include <stdio.h>
#define L 1002
char m[L][L];
int d[L][L], v[L*L][2], l, c;
int nrz(){
int i, j, r, x;
r=0;
for(i=1; i<=l; i++)
for(j=1; j<=c; j++)
if(d[i][j]==0)
r++;
if(r==0)
x=1;
else
x=0;
return x;
}
int main(){
FILE *fin, *fout;
int i, j, dis, k, x, y, x1, y1, f, dd, dt;
fin=fopen("dwarfland.in", "r");
fout=fopen("dwarfland.out", "w");
fscanf(fin, "%d%d ", &l, &c);
for(i=1; i<=l; i++){
for(j=1; j<=c; j++)
m[i][j]=fgetc(fin);
fgetc(fin);
}
for(i=0; i<l+2; i++)
m[i][0]=m[i][c+1]='Z';
for(j=0; j<c+2; j++)
m[0][j]=m[l+1][j]='Z';
for(i=1; i<=l; i++)
for(j=1; j<=c; j++)
if(m[i][j]=='A'){
x1=i;
y1=j;
}
j=f=d[x1][y1]=0;
v[0][0]=x1;
v[0][1]=y1;
dis=i=1;
while(nrz()==0){
k=0;
for(; j<i; j++){
x=v[j][0];
y=v[j][1];
if(m[x-1][y]!='Z'){
if(m[x-1][y]=='D')
dd=dis;
if(m[x-1][y]=='A' && f==0){
dt=dis;
f=1;
}
d[x-1][y]=dis;
v[k+i][0]=x-1;
v[k+i][1]=y;
k++;
}
if(m[x+1][y]!='Z'){
if(m[x+1][y]=='D')
dd=dis;
if(m[x+1][y]=='A' && f==0){
dt=dis;
f=1;
}
d[x+1][y]=dis;
v[k+i][0]=x+1;
v[k+i][1]=y;
k++;
}
if(m[x][y-1]!='Z'){
if(m[x][y-1]=='D')
dd=dis;
if(m[x][y-1]=='A' && f==0){
dt=dis;
f=1;
}
d[x][y-1]=dis;
v[k+i][0]=x;
v[k+i][1]=y-1;
k++;
}
if(d[x][y+1]!='Z'){
if(m[x][y+1]=='D')
dd=dis;
if(m[x][y+1]=='A' && f==0){
dt=dis;
f=1;
}
d[x][y+1]=dis;
v[k+i][0]=x;
v[k+i][1]=y+1;
k++;
}
}
j=i;
i+=k;
dis++;
}
fprintf(fout, "%d\n", dd+dt);
fclose(fin);
fclose(fout);
return 0;
}