Cod sursa(job #1518149)

Utilizator andreeacozma95Cozma Andreea andreeacozma95 Data 5 noiembrie 2015 17:20:16
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.56 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int l;
    int c;
}coada;

int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
int n,m;
short a[102][102];
short int rm[100][100],jm[100][100];
coada c[20050];
int start=0,stop=0;
int ir,jr,ij,jj;

void citire()
{
    int i,j;
    char c;
    FILE *f=fopen ("rj.in","r");
    fscanf(f,"%d%d",&n,&m);

    for(i=0;i<=n+1;i++) //bordez cu -1
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
    }

    for(i=1;i<=n;i++)
    {
        fscanf(f,"%c",&c);
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%c",&c);
            a[i][j]=(c=='X')?1:0;
            rm[i][j]=0;
            jm[i][j]=0;

            if(c=='R')
                ir=i, jr=j;
            if(c=='J')
                ij=i, jj=j;
        }
    }
}

void push(int i,int j)
{
    c[stop].l=i;
    c[stop].c=j;
    stop++;
}

coada pop()
{
    return c[start++];
}

void lee(short int h[100][100])
{
    coada punct;
    while(start!=stop)
    {
       punct=pop();
       int k;
        for(k=0;k<8;k++)
           // if(punct.l+dx[k]>=1 && punct.l+dx[k]<=n && punct.c+dy[k]>=1 && punct.c+dy[k]<=m)
                if(a[punct.l+dx[k]][punct.c+dy[k]]==0 && (h[punct.l+dx[k]][punct.c+dy[k]]==0 || h[punct.l+dx[k]][punct.c+dy[k]]>h[punct.l][punct.c]+1))
                {
                    h[punct.l+dx[k]][punct.c+dy[k]]=h[punct.l][punct.c]+1;
                    push(punct.l+dx[k],punct.c+dy[k]);
                }
    }
}

int main()
{
    int i,j,min=10000,imin=0,jmin=0;
    FILE *g=fopen("rj.out","w");

    citire();

    a[ir][jr]=1;
    a[ij][jj]=1;

    push(ir,jr);
    lee(rm);
    push(ij,jj);
    lee(jm);

     for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(rm[i][j]==jm[i][j])
                if(rm[i][j]<min && rm[i][j]!=0)
                {
                    min=rm[i][j];
                    imin=i;
                    jmin=j;
                }

    fprintf(g,"%d %d %d\n",rm[imin][jmin],imin,jmin);

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

    fprintf(g,"\n");

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

    fprintf(g,"\n");

     for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            fprintf(g,"%d ",jm[i][j]);
        fprintf(g,"\n");
    }
    return 0;
}