Cod sursa(job #2780883)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 8 octombrie 2021 07:17:05
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
#define N 102
struct P {
    int l,c;
}e[N*N],p;
int n,m,a,b,u,v,r[N][N],j[N][N],c[]={0,1,0,-1,-1,1,-1,1},d[]={1,0,-1,0,-1,1,1,-1},t,x,y,i,k,g[N][N];
char l[N][N],w;
void P(int x,int y,int g[][N])
{
    int t=0,s=0,i,k;
    for(i=0;i<=n+1;++i)
        for(k=0;k<=m+1;++k)
            g[i][k]=-1;
    for(e[0].l=x,e[0].c=y,g[x][y]=1;t<=s;)
        for(p=e[t++],i=0;i<8;++i)
            if(l[p.l+c[i]][p.c+d[i]]==' '&&g[p.l+c[i]][p.c+d[i]]==-1)
                g[p.l+c[i]][p.c+d[i]]=1+g[p.l][p.c],
                e[++s].l=p.l+c[i],
                e[s].c=p.c+d[i];
}
int main()
{
    freopen("rj.in","r",stdin),freopen("rj.out","w",stdout),scanf("%d%d\n",&n,&m);
    for(i=0;i<n+2;++i)
        l[i][0]=l[i][m+1]='X';
    for(i=0;i<m+2;++i)
        l[0][i]=l[n+1][i]='X';
    for(i=1;i<=n;++i) {
        for(k=1;k<=m;++k) {
            w=getchar(),l[i][k]=w;
            if(l[i][k]=='R')
                a=i,b=k,l[i][k]=' ';
            if(l[i][k]=='J')
                u=i,v=k,l[i][k]=' ';
		}
		w=getchar();
	}
    P(a,b,r),P(u,v,j),t=N*N+5,x=-1,y=-1;
    for(i=1;i<=n;++i)
        for(k=1;k<=m;++k)
            if(r[i][k]==j[i][k])
                if(r[i][k]<t&&r[i][k]!=-1)
                    t=r[i][k],x=i,y=k;
    printf("%d %d %d",t,x,y);
    return 0;
}