Cod sursa(job #1655399)

Utilizator sebastiannrxRichiteanu Mihai Sebastian sebastiannrx Data 17 martie 2016 22:37:57
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.33 kb
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,roi,roj,jui,juj,pas,ok,mi,ii,jj;
int a[101][101],b[101][101];
char x;
int main()
{   f>>n>>m;
    f.get(x);
    i=1;
    for (i=1;i<=n;++i) {
        for (j=1;j<=m;++j) {
            f.get(x);
            if (x==88) {
                a[i][j]=-1;
                b[i][j]=-1;}
            else if (x==82) {
                roi=i;
                roj=j;}
             else if (x==74) {
                jui=i;
                juj=j;}
            else if (x==10)
               --j;}
        if (j==m+1 && i==n+1)
            break;
        }
    pas=1;
    a[roi][roj]=1;
    while (1) {
        ok=0;
        for (i=1;i<=n;++i)
            for (j=1;j<=m;++j)
                if (a[i][j]==pas) {
                    if (i>1 && a[i-1][j]==0) {
                        ok=1;
                        a[i-1][j]=pas+1;}
                    if (j<m && a[i][j+1]==0) {
                        ok=1;
                        a[i][j+1]=pas+1;}
                    if (i<n && a[i+1][j]==0) {
                        ok=1;
                        a[i+1][j]=pas+1;}
                    if (j>1 && a[i][j-1]==0) {
                        ok=1;
                        a[i][j-1]=pas+1;}
                    if (i>1 && j<m && a[i-1][j+1]==0) {
                        ok=1;
                        a[i-1][j+1]=pas+1;}
                    if (i<n && j<m && a[i+1][j+1]==0) {
                        ok=1;
                        a[i+1][j+1]=pas+1;}
                    if (i<n && j>1 && a[i+1][j-1]==0) {
                        ok=1;
                        a[i+1][j-1]=pas+1;}
                    if (i>1 && j>1 && a[i-1][j-1]==0) {
                        ok=1;
                        a[i-1][j-1]=pas+1;}}
        if (ok==0)
            break;
        ++pas;}
    pas=1;
    b[jui][juj]=1;
    while (1) {
        ok=0;
        for (i=1;i<=n;++i)
            for (j=1;j<=m;++j)
                if (b[i][j]==pas) {
                    if (i>1 && b[i-1][j]==0) {
                        ok=1;
                        b[i-1][j]=pas+1;}
                    if (j<m && b[i][j+1]==0) {
                        ok=1;
                        b[i][j+1]=pas+1;}
                    if (i<n && b[i+1][j]==0) {
                        ok=1;
                        b[i+1][j]=pas+1;}
                    if (j>1 && b[i][j-1]==0) {
                        ok=1;
                        b[i][j-1]=pas+1;}
                    if (i>1 && j<m && b[i-1][j+1]==0) {
                        ok=1;
                        b[i-1][j+1]=pas+1;}
                    if (i<n && j<m && b[i+1][j+1]==0) {
                        ok=1;
                        b[i+1][j+1]=pas+1;}
                    if (i<n && j>1 && b[i+1][j-1]==0) {
                        ok=1;
                        b[i+1][j-1]=pas+1;}
                    if (i>1 && j>1 && b[i-1][j-1]==0) {
                        ok=1;
                        b[i-1][j-1]=pas+1;}}
        if (ok==0)
            break;
        ++pas;}
    mi=999999999;
    for (i=1;i<=n;++i)
        for (j=1;j<=m;++j)
            if (a[i][j]!=-1 && a[i][j]==b[i][j] && a[i][j]<mi) {
                mi=a[i][j];
                ii=i;
                jj=j;}
    g<<ii<<" "<<jj<<" "<<mi<<'\n';

    return 0;
}