Cod sursa(job #1169826)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 12 aprilie 2014 09:04:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m;
char c[300];
queue<pair<int, int> > Q;
const int di[] = { 1, 0, -1, -1, -1, 0, 1,1  };
const int dj[] = { 1, 1, 1, 0, -1,-1,-1,0 };
int a[101][101];
int s[101][101];

bool inside(int i, int j)
{
    return i<=n && j<=m && i>=1 && j >= 1;
}


int main()
{
    fin>>n>>m;
    fin.getline(c,30);
    for(int i=1;i<=n;i++)
    {
        fin.getline(c,300);
        for(int j=1;j<=n;j++)
            if(c[j-1] == 'X')
            {
                a[i][j]  = -1;
            }
            else if(c[j-1] == 'R')
            {
                s[i][j] = 1;
                Q.push(make_pair(i,j));
                a[i][j] = 1;
            }
            else if(c[j-1] == 'J')
            {
                s[i][j]  = 2;
                a[i][j] = 1;
                Q.push(make_pair(i,j) );
            }
    }


    while(!Q.empty())
    {
        int i = Q.front().first;
        int j = Q.front().second;
        Q.pop();
        for(int k = 0; k<8 ;k ++)
        {
            int inou = i + di[k];
            int jnou = j + dj[k];
            if(inside(inou,jnou))
            {
                if(a[inou][jnou] == 0)
                {
                    Q.push(make_pair(inou,jnou));
                    a[inou][jnou] = a[i][j] + 1;
                    s[inou][jnou] = s[i][j];
                }
                else if(s[i][j] == 1 && s[inou][jnou] == 2)
                {
                    fout<<a[i][j]<<' '<<i<<' '<<j<<'\n';
                    k = 9;
                    while(!Q.empty())
                        Q.pop();
                }
            }
        }


    }

    fin.close();
    return 0;
}