Cod sursa(job #1121926)

Utilizator bububulmez1Bulmez Alexandru bububulmez1 Data 25 februarie 2014 14:49:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");

int n,m,a[101][101],b[101][101],r1,r2,jul1,jul2,dir=8,ok,mini=99999;
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};

struct coada
{
    int xx,yy;
};
queue <coada> q;
coada loc;

void lee(int d[101][101])
{

    while(!(q.empty()))
    {
        for(int u=0;u<dir;u++)
        {
            int x1=q.front().xx+dx[u],y1=q.front().yy+dy[u];
            if(x1>=0 && x1<n && y1>=0 && y1<m)
            {
                if(d[x1][y1]==0)
                {
                    d[x1][y1]=d[q.front().xx][q.front().yy]+1;
                    coada aux;
                    aux.xx=x1;
                    aux.yy=y1;
                    q.push(aux);
                }
                if(ok==1)
                    if(d[q.front().xx][q.front().yy]==a[q.front().xx][q.front().yy])
                        if(d[q.front().xx][q.front().yy]<mini)
                        {
                            mini=d[q.front().xx][q.front().yy];
                            loc.xx=q.front().xx;
                            loc.yy=q.front().yy;
                        }



            }

        }
        q.pop();

    }
}

int main()
{
    char t;
    fscanf(f,"%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            fscanf(f,"%c",&t);
            if(t=='\n')
                fscanf(f,"%c",&t);
            if(t=='X')
               a[i][j]=-1,b[i][j]=-1;
            else if(t=='R')
            {
                r1=i;
                r2=j;
            }
            else if(t=='J')
            {
                jul1=i;
                jul2=j;
            }

        }

    coada aux;
    aux.xx=r1;
    aux.yy=r2;
    q.push(aux);
    a[r1][r2]=1;
    lee(a);

     aux.xx=jul1;
    aux.yy=jul2;
    q.push(aux);
    b[jul1][jul2]=1;
    ok=1;
    lee(b);
    fprintf(g,"%d %d %d",mini,loc.xx+1,loc.yy+1);
    return 0;
}