Cod sursa(job #373207)

Utilizator mariuscris90giuroiu marius mariuscris90 Data 12 decembrie 2009 22:45:27
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 3 kb
//program romeo si julieta

#include <stdio.h>
#include <stdlib.h>

int a[102][102];
int pri,prj,pji,pjj,n,m,k,nrr,nrj,nrr2,nrj2,timp,min,min2;
typedef struct {
       int x,y;}poz;
poz x[9],ro1[102],ro2[102],ju1[102],ju2[102];
FILE *f,*g;

void citire(int a[102][102],int n,int m)
{
    char c;
    int i,j;
    for(i=1;i<=n;i++)
    {
    for (j=1;j<=m;j++)
    {
    fscanf(f,"%c",&c);
   if (c=='X') a[i][j]=-1;
             else a[i][j]=0;
    if (c=='R') {pri=i;prj=j;};
    if (c=='J') {pji=i;pjj=j;};
    };
    fscanf(f,"%c",&c);
    };
    return;
};

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

int main()
{
    int i,j,t,li,lj,lfi,lfj;
    min=-1;min2=-1;
    g=fopen("rj.out","w");
    x[1].x=1;x[1].y=0;
    x[2].x=0;x[2].y=1;
    x[3].x=-1;x[3].y=0;
    x[4].x=0;x[4].y=-1;
    x[5].x=1;x[5].y=1;
    x[6].x=1;x[6].y=-1;
    x[7].x=-1;x[7].y=1;
    x[8].x=-1;x[8].y=-1;
    f=fopen("rj.in","r");
    fscanf(f,"%d %d\n",&n,&m);
    citire(a,n,m);
    fclose(f);
    bordare(a,n,m);
   // for(i=1;i<=n;i++)
  //  {
 //     for(j=1;j<=m;j++)
 //     fprintf(g,"%d ",a[i][j]);
 //     fprintf(g,"\n");
//    }; 
    k=1;
    a[pri][prj]=1;
    a[pji][pjj]=2;
    ro1[1].x=pri;ro1[1].y=prj;
    ju1[1].x=pji;ju1[1].y=pjj;
    nrr=1;nrj=1;
    t=0;
    do{
      k=k+1;
      nrr2=0;
      nrj2=0;
      //aplicam algoritmul pt Romeo
      for(i=1;i<=nrr;i++)
      for(j=1;j<=8;j++)
      {
         li=x[j].x+ro1[i].x;
         lj=x[j].y+ro1[i].y;
         if (a[li][lj]==0) { a[li][lj]=1;
                           nrr2=nrr2+1;
                           ro2[nrr2].x=li;
                           ro2[nrr2].y=lj;
                           };
      };
      for(i=1;i<=nrr2;i++)
      {
        ro1[i].x=ro2[i].x;
        ro1[i].y=ro2[i].y;
      };
      nrr=nrr2;
      //aplica algoritmul pt Julieta
      for(i=1;i<=nrj;i++)
      for(j=1;j<=8;j++)
      {
         li=x[j].x+ju1[i].x;
         lj=x[j].y+ju1[i].y;
         if (a[li][lj]==0) { a[li][lj]=2;
                           nrj2=nrj2+1;
                           ju2[nrj2].x=li;
                           ju2[nrj2].y=lj;
                           };
         if (a[li][lj]==1) if (min=-1) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;}
                               else if (min>li) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;}
                                       else if ((min=li)&&(min2>lj)) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;};
                                        
      };
      for(i=1;i<=nrj2;i++)
      {
       ju1[i].x=ju2[i].x;
       ju1[i].y=ju2[i].y;
       };
      nrj=nrj2;
    }
    while(t==0);
   
    fprintf(g,"%d %d %d",timp,min,min2);
    fclose(g);
    return 0;
};