Cod sursa(job #1511236)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 26 octombrie 2015 11:13:01
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 6.8 kb
#include <stdio.h>

using namespace std;

short rom[101][101],jul[101][101];
struct love
{
    int lin;
    int col;
}cd[100*100+1];
int main()
{
    FILE *fin,*fout;

    fin=fopen("rj.in","r");
    fout=fopen("rj.out","w");

    int i,j,n,m,ir=0,jr=0,ij=0,jj=0,pr=0,ul=0,tmin=100*100,indi=0,indj=0,t=0;
    char c;

    fscanf(fin,"%d%d",&n,&m);

    for(i=1;i<=n;i++)
    {
        c=fgetc(fin);
        for(j=1;j<=m;j++)
        {
            c=fgetc(fin);
            if(c=='R')
            {
                ir=i;
                jr=j;
                rom[i][j]=-2;
            }
            if(c=='J')
            {
                ij=i;
                jj=j;
                jul[i][j]=-2;
            }
            if(c=='X')
            {
                jul[i][j]=-1;
                rom[i][j]=-1;
            }
        }
    }
    for(j=0;j<=m;j++)
    {
        rom[0][j]=-1;
        jul[0][j]=-1;
        rom[n+1][j]=-1;
        jul[n+1][j]=-1;
    }
    for(i=0;i<=n;i++)
    {
        rom[i][0]=-1;
        jul[i][0]=-1;
        rom[i][m+1]=-1;
        jul[i][m+1]=-1;
    }

    pr=1;
    ul=0;
    i=ir;
    j=jr;
    {
        if(rom[i+1][j]==0)
        {
            rom[i+1][j]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j;
        }
        if(rom[i-1][j]==0)
        {
            rom[i-1][j]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j;
        }
        if(rom[i+1][j+1]==0)
        {
            rom[i+1][j+1]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j+1;
        }
        if(rom[i+1][j-1]==0)
        {
            rom[i+1][j-1]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j-1;
        }
        if(rom[i-1][j-1]==0)
        {
            rom[i-1][j-1]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j-1;
        }
        if(rom[i-1][j+1]==0)
        {
            rom[i-1][j+1]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j+1;
        }
        if(rom[i][j+1]==0)
        {
            rom[i][j+1]=1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j+1;
        }
        if(rom[i][j-1]==0)
        {
            rom[i][j-1]=1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j-1;
        }
    }
    while(pr<=ul)
    {
        i=cd[pr].lin;
        j=cd[pr].col;
        pr++;
        if(rom[i+1][j]==0)
        {
            rom[i+1][j]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j;
        }
        if(rom[i-1][j]==0)
        {
            rom[i-1][j]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j;
        }
        if(rom[i+1][j+1]==0)
        {
            rom[i+1][j+1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j+1;
        }
        if(rom[i+1][j-1]==0)
        {
            rom[i+1][j-1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j-1;
        }
        if(rom[i-1][j-1]==0)
        {
            rom[i-1][j-1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j-1;
        }
        if(rom[i-1][j+1]==0)
        {
            rom[i-1][j+1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j+1;
        }
        if(rom[i][j+1]==0)
        {
            rom[i][j+1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j+1;
        }
        if(rom[i][j-1]==0)
        {
            rom[i][j-1]=rom[i][j]+1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j-1;
        }
    }
    ///
    pr=1;
    ul=0;
    i=ij;
    j=jj;
    {
        if(jul[i+1][j]==0)
        {
            jul[i+1][j]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j;
        }
        if(jul[i-1][j]==0)
        {
            jul[i-1][j]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j;
        }
        if(jul[i+1][j+1]==0)
        {
            jul[i+1][j+1]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j+1;
        }
        if(jul[i+1][j-1]==0)
        {
            jul[i+1][j-1]=1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j-1;
        }
        if(jul[i-1][j-1]==0)
        {
            jul[i-1][j-1]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j-1;
        }
        if(jul[i-1][j+1]==0)
        {
            jul[i-1][j+1]=1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j+1;
        }
        if(jul[i][j+1]==0)
        {
            jul[i][j+1]=1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j+1;
        }
        if(jul[i][j-1]==0)
        {
            jul[i][j-1]=1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j-1;
        }
    }

    while(pr<=ul)
    {
        i=cd[pr].lin;
        j=cd[pr].col;
        pr++;
        if(jul[i+1][j]==0)
        {
            jul[i+1][j]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j;
        }
        if(jul[i-1][j]==0)
        {
            jul[i-1][j]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j;
        }
        if(jul[i+1][j+1]==0)
        {
            jul[i+1][j+1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j+1;
        }
        if(jul[i+1][j-1]==0)
        {
            jul[i+1][j-1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i+1;
            cd[ul].col=j-1;
        }
        if(jul[i-1][j-1]==0)
        {
            jul[i-1][j-1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j-1;
        }
        if(jul[i-1][j+1]==0)
        {
            jul[i-1][j+1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i-1;
            cd[ul].col=j+1;
        }
        if(jul[i][j+1]==0)
        {
            jul[i][j+1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j+1;
        }
        if(jul[i][j-1]==0)
        {
            jul[i][j-1]=jul[i][j]+1;
            ul++;
            cd[ul].lin=i;
            cd[ul].col=j-1;
        }
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    {
        if(rom[i][j]==jul[i][j])
        {
            t=rom[i][j];
            if(t<tmin&&t>=1)
            {
                tmin=t;
                indi=i;
                indj=j;
            }
        }
    }
    fprintf(fout,"%d %d %d",tmin+1, indi,indj);
    return 0;
}