Cod sursa(job #157224)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 12 martie 2008 21:54:25
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<stdio.h>
#define M 101

int n,m,a[M][M],b[M][M],ri,rj,ji,jj,i,j;
char c;

void rezolva()
{int min,q,w;
     min=32000;
     for (i=1;i<=n;i++)
     for (j=1;j<=m;j++)
	 if (a[i][j]==b[i][j]&&a[i][j]!=-1 &&a[i][j]<min)
	    min=a[i][j],q=i,w=j;
     printf("%d %d %d\n",min,q,w);
}

void coada(int i,int j,int p[M][M])
{int q[10000][2],l,ii,jj,
     dii[8]={1,1, 1,0, 0,-1,-1,-1},
     djj[8]={0,1,-1,1,-1, 1, 0,-1};
     q[1][0]=i;
     q[1][1]=j;
     p[i][j]=1;
     for(i=1,l=1;i<=l;i++)
     {
                          ii=q[i][0];jj=q[i][1];
                          for (j=0;j<8;j++)
			      if (p[ii+dii[j]][jj+djj[j]]==0 || p[ii][jj]+1<p[ii+dii[j]][jj+djj[j]])
                                    q[++l][0]=ii+dii[j],q[l][1]=jj+djj[j],p[ii+dii[j]][jj+djj[j]]=p[ii][jj]+1;                         
     }     
}

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.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=='R') ri=i,rj=j;
	    else
		if (c=='J') ji=i,jj=j;
		else
		    if (c=='X') a[i][j]=-1,b[i][j]=-1;
                    else
                        a[i][j]=0,b[i][j]=0;
        }
        scanf("%c",&c);
    }
    for (i=0;i<=n+1;i++)
        a[i][0]=-1,a[i][m+1]=-1,b[i][0]=-1,b[i][m+1]=-1;
    for (i=0;i<=m+1;i++)
        a[0][i]=-1,b[0][i]=-1,b[n+1][i]=-1,a[n+1][i]=-1;
    
    coada(ri,rj,a);
    coada(ji,jj,b);
    rezolva();
    return 0;
}