Cod sursa(job #1398734)

Utilizator BKmarianmarian BKmarian Data 24 martie 2015 13:05:32
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <stdio.h>
#include<string.h>
FILE *f;
FILE *g;
int x[]={0,-1,0,1,0,-1,1,-1,1},y[]={0,0,1,0,-1,-1,-1,1,1};
struct punct{int lin,col;}ju,ro,intalnire;
int a[101][101],n,m,i,j,k,b[101][101],d1[101][101],d2[101][101];

void lee(punct t,punct tt,int aa[101][101],int d[101][101])
{
int prim,ultim;
punct plecare,p,v,c[10001];

for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    aa[i][j]=0;
prim=ultim=0;
plecare.lin=t.lin;
plecare.col=t.col;
c[0]=plecare;
aa[plecare.lin][plecare.col]=1;

while(prim<=ultim&&aa[tt.lin][tt.col]==0) {
 p=c[prim];
prim++;
for(k=1;k<=8;k++) {
v.lin=p.lin+x[k];
v.col=p.col+y[k];
if(v.lin<=n&&v.lin>0&&v.col<=m&&v.col>0&&aa[v.lin][v.col]==0&&d[v.lin][v.col]==1)
{
    aa[v.lin][v.col]=aa[p.lin][p.col]+1;
    ultim++;
    c[ultim]=v;
}
}
}
}
int main()
{
    f = fopen ("rj.in" , "r");
    g = fopen ("rj.out" , "w");
    int minim;
    fscanf(f,"%d%d",&n,&m);

    char s[200];
     fgets (s , 101 , f);//pentru golire buffer
    for(i=1;i<=n;i++)
      {
  //  fgets (s , 100 , f);
    fgets (s , 101 , f);
   // printf("%s\n",s);
    for(j=0;j<m;j++)
        if(s[j]==' '|| j>=strlen(s)) d1[i][j+1]=d2[i][j+1]=1;
        else if(s[j]=='X') d1[i][j+1]=d2[i][j+1]=0;
        else if(s[j]=='R')
            {
                d1[i][j+1]=1;
                ro.lin=i;
                ro.col=j+1;
            }
        else if(s[j]=='J')
        {
            d2[i][j+1]=1;
            ju.lin=i;
            ju.col=j+1;
        }
      }
  /*     for(i=1;i<=n;i++) {
        for(j=1;j<=m;j++)
        printf("%d ",d[i][j]);
     printf("\n");}

     printf("\n"); */

lee(ro,ju,a,d1);
lee(ju,ro,b,d2);

      for(i=1;i<=n;i++) {
        for(j=1;j<=m;j++)
        printf("%d ",a[i][j]);
     printf("\n");}

     printf("\n");

       for(i=1;i<=n;i++) {
        for(j=1;j<=m;j++)
        printf("%d ",b[i][j]);
     printf("\n");}

minim=999999;
     for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
         if(a[i][j]==b[i][j]&&a[i][j]&&a[i][j]<minim)
            minim=a[i][j],intalnire.lin=i,intalnire.col=j;
fprintf(g,"%d %d %d",minim,intalnire.lin,intalnire.col);
}