Pagini recente » Rating Moldovan Reka (breki) | Cod sursa (job #1373682) | Cod sursa (job #2306982) | Cod sursa (job #1851965) | Cod sursa (job #184283)
Cod sursa(job #184283)
#include <stdio.h>
#define N 103
#define INF 100000000
struct poz{
int x,y;
};
struct ab{
int l,d;
};
int n,m,a[N][N];
poz romeo,julieta,sr[N*N],sj[N*N];
ab r[N][N],j[N][N];
const int lin[8]={0,0,1,-1,1,1,-1,-1};
const int col[8]={1,-1,0,0,1,-1,1,-1};
void leer(int x,int y){
int t;
for(t=0;t<8;t++)
if(r[x+lin[t]][y+col[t]].l==-2){
r[x+lin[t]][y+col[t]].l=r[x][y].l+1;
sr[++sr[0].x].x=x+lin[t];
sr[sr[0].x].y=y+col[t];
if(t>3) r[x+lin[t]][y+col[t]].d++;
}
}
void leej(int x,int y){
int t;
for(t=0;t<8;t++)
if(j[x+lin[t]][y+col[t]].l==-2){
j[x+lin[t]][y+col[t]].l=j[x][y].l+1;
sj[++sj[0].x].x=x+lin[t];
sj[sj[0].x].y=y+col[t];
if(t>3) j[x+lin[t]][y+col[t]].d++;
}
}
int main(){
int i,p,min=INF,x,y;
char c;
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
scanf("%d%d\n",&m,&n);
for (i=1;i<=m;++i)
for (p=1;p<=n+1;++p){
scanf("%c",&c);
if (c=='R'){
romeo.x=i;
romeo.y=p;
r[i][p].l=1;
j[i][p].l=-2;
}
if (c=='J'){
julieta.x=i;
julieta.y=p;
r[i][p].l=-2;
j[i][p].l=1;
}
if (c=='X'){
r[i][p].l=-1;
j[i][p].l=-1;
}
if (c==' '){
r[i][p].l=-2;
j[i][p].l=-2;
}
}
sr[1].x=romeo.x;
sr[1].y=romeo.y;
sj[1].x=julieta.x;
sj[1].y=julieta.y;
sr[0].x=sj[0].x=1;
for(i=1;i<=sr[0].x;i++)
leer(sr[i].x,sr[i].y);
for(i=1;i<=sj[0].x;i++)
leej(sj[i].x,sj[i].y);
for(i=1;i<=m;i++)
for(p=1;p<=n;p++)
if(r[i][p].l!=-1 && r[i][p].l!=-2)
if(r[i][p].l==j[i][p].l){
if(r[i][p].l<min) {
min=r[i][p].l;
x=i;
y=p;
}
}
else {
if(r[i][p].l<j[i][p].l && r[i][p].l+r[i][p].d>=j[i][p].l && j[i][p].l<min) {
min=j[i][p].l;
x=i;
y=p;
}
if(r[i][p].l>j[i][p].l && j[i][p].l+j[i][p].d>=r[i][p].l && r[i][p].l<min) {
min=r[i][p].l;
x=i;
y=p;
}
}
for(i=1;i<=m;i++){
for(p=1;p<=n;p++)
printf("%d ",r[i][p].l);
printf("\n");
}
for(i=1;i<=m;i++){
for(p=1;p<=n;p++)
printf("%d ",j[i][p].l);
printf("\n");
}
printf("%d %d %d\n",min,x,y);
}