Cod sursa(job #1577460)

Utilizator zavelcasilviuzavelca silviu zavelcasilviu Data 23 ianuarie 2016 14:26:47
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include<fstream>
#include<cstring>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,a[101][101],b[101][101],c,c1,C,C1,o,M=100001;
char v[101];
int x[10]={-1,-1,0,1,1, 1,0,-1};
int y[10]={0,  1,1,1,0,-1,-1,-1};
queue <pair< int, int> >q;
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(v,m+1);
        for(j=0;j<strlen(v);j++)
        {
            if(v[j]=='X')
                a[i][j+1]=1,b[i][j+1]=1;
            else
            if(v[j]=='R')
            c=i,c1=j+1,a[i][j+1]=1;
            else
            if(v[j]=='J')
            C=i,C1=j+1,b[i][j+1]=1;
        }
    }
    q.push(make_pair(c,c1));
    while(!q.empty())
    {
        i=q.front().first;
        j=q.front().second;
        for(o=0;o<8;o++)
        {
            if(a[i+x[o]][j+y[o]]==0&&i+x[o]>0&&i+x[o]<=n&&j+y[o]>0&&j+y[o]<=m)
                a[i+x[o]][j+y[o]]=a[i][j]+1,q.push(make_pair(i+x[o],j+y[o]));
        }
        q.pop();
    }
     q.push(make_pair(C,C1));
    while(!q.empty())
    {
        i=q.front().first;
        j=q.front().second;
        for(o=0;o<8;o++)
        {
            if(b[i+x[o]][j+y[o]]==0&&i+x[o]>0&&i+x[o]<=n&&j+y[o]>0&&j+y[o]<=m)
                b[i+x[o]][j+y[o]]=b[i][j]+1,q.push(make_pair(i+x[o],j+y[o]));
        }
        q.pop();
    }
    for(i=1;i<=n;i++)
    {
           for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]>1&&a[i][j]<M)
                c=a[i][j],c1=i,C=j;
    }
    g<<c<<" "<<c1<<" "<<C;
}