Cod sursa(job #1121032)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 25 februarie 2014 11:14:10
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>

using namespace std;
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");

const int dl[9]={1,1,0,-1,-1,-1,0,1};
const int dc[9]={0,-1,-1,-1,0,1,1,1};

int n,m,i,j,a[102][102],b[102][102],d[102][102],mn,o,oo,x1,x2,y1,y2;
char cc;
struct nod
{
 int x;
 int y;
}c[8003];

void lee(int x,int y,int b[102][102])
{
int p=1,u=1,l1,c1;
nod l;
c[1].x=x;
c[1].y=y;
b[x][y]=1;
while(p<=u)
{
 l=c[p];
 for(i=0;i<=7;i++)
 {
    l1=l.x+dl[i];
    c1=l.y+dc[i];
  if (a[l1][c1]!=-1&&(b[l1][c1]==0|| b[l1][c1]>b[l.x][l.y]+1)){b[l1][c1]=b[l.x][l.y]+1;u++;c[u].x=l1;c[u].y=c1;}
 }
p++;
}
}

void bordare()
{
 int i,j;
 for(i=0;i<=n+1;i++)
 {
  a[i][0]=-1;
  a[i][m+1]=-1;
 }
 for(j=1;j<=m;j++)
 {
   a[0][j]=-1;
   a[n+1][j]=-1;
 }
}

int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%c",&cc);
for(j=1;j<=m;j++)
{
fscanf(f,"%c",&cc);
if (cc=='X')a[i][j]=-1;
else if (cc=='R'){x1=i;y1=j;}
else if (cc=='J'){x2=i;y2=j;}
}
}
bordare();
lee(x1,y1,b);
lee(x2,y2,d);

mn=9999;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if (b[i][j]==d[i][j]&& b[i][j]<mn && b[i][j]!=0){mn=b[i][j];o=i;oo=j;}

fprintf(g,"%d %d %d",mn,o,oo);
fclose(g);
return 0;
}