Cod sursa(job #1256875)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 6 noiembrie 2014 22:52:56
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int i,j,n,m,rc,rl,jc,jl,ll,cc,c,l,Min,dx[]={0,0,1,0,-1,1,-1,-1,1},dy[]={0,1,0,-1,0,1,1,-1,-1},viz[101][101],q[2][10001],viz1[101][101];
char x[102];
unsigned char a[102][102];
int coada(){
        int p,u,k,l,c;
        p=1;u=2;

        while(p<=u){
                for(int i=1;i<=8;i++){
                    l=q[0][p]+dx[i];
                    c=q[1][p]+dy[i];
                        if(a[l][c]==0 && viz[l][c]==10002 ){
                            u++;
                            q[0][u]=l;
                            q[1][u]=c;
                            viz[l][c]=viz[q[0][p]][q[1][p]]+1;
                            }
                }
                     p++;

        }
}

int main()
{f>>n>>m;
f.get();
    for(i=1;i<=n;i++){
        f.getline(x,102);
        for(j=0;j<m;j++){

            if(x[j]=='X')
                a[i][j+1]=1;
             else
            if(x[j]==' ')
                a[i][j+1]=0;
           else
            if(x[j]=='R'){
                a[i][j+1]=2;
                rl=i;
                rc=j+1;}

            if(x[j]=='J'){
                a[i][j+1]=3;
                jl=i;
                jc=j+1;}}}
    for(i=0;i<=n+1;i++)
        a[i][0]=a[i][m+1]=1;
        for(i=0;i<=m+1;i++)
            a[0][i]=a[n+1][i]=1;

    q[0][1]=rl;
    q[1][1]=rc;
        for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        viz[i][j]=10002;
            viz[rl][rc]=1;
    coada();
    memset(q,0,sizeof(q));
         for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        viz1[i][j]=10002;
        q[0][1]=jl;
        q[1][1]=jc;
        viz1[jl][jc]=1;
   int  p=1;int u=2;

        while(p<=u){
                for(int i=1;i<=8;i++){
                    l=q[0][p]+dx[i];
                    c=q[1][p]+dy[i];
                        if(a[l][c]==0 && viz1[l][c]==10002){
                            u++;
                            q[0][u]=l;
                            q[1][u]=c;
                            viz1[l][c]=viz1[q[0][p]][q[1][p]]+1;
                            }
                }
                     p++;

        }
        Min=10002;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        if(viz[i][j]==viz1[i][j]&&viz[i][j]!=10002&&viz[i][j]>=1){
                if(Min>viz[i][j]){
            Min=viz[i][j];
            ll=i;
            cc=j;}}
        g<<Min<<" "<<ll<<" "<<cc;
    return 0;
}