Cod sursa(job #2124843)

Utilizator sichetpaulSichet Paul sichetpaul Data 7 februarie 2018 17:37:49
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
short int a[101][101];char s[101];
short int r[101][101],jj[101][101];
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
queue <int> lin;
queue <int> col;
int n,m;
void Lee(int i,int j,short int mat[101][101]) {
    int x,y,l,c,p;
    lin.push(i);
    col.push(j);
    mat[i][j]=1;
    while (!lin.empty()) {
        l=lin.front();
        c=col.front();
        for (p=0;p<8;++p) {
            x=l+dx[p];
            y=c+dy[p];
            if (a[x][y]!=-1 && mat[x][y]==0) {
                mat[x][y]=mat[l][c]+1;
                lin.push(x);
                col.push(y);
            }
        }
        lin.pop();
        col.pop();
    }
}
int main()
{ int i,j,sol,x1,y1,x2,y2,x,y;
    ifstream f("rj.in");
    ofstream g("rj.out");
    f>>n>>m;
    for (i=1;i<=n;++i) {
        f.get();
        f.get(s,101);
    for (j=1;j<=m;++j) {
        if (s[j-1]==' ') a[i][j]=0;
        if (s[j-1]=='X') a[i][j]=-1;
        if (s[j-1]=='R') a[i][j]=1,x1=i,y1=j;
        if (s[j-1]=='J') a[i][j]=2,x2=i,y2=j;
    }
    }
    for (i=0;i<=n+1;++i)
        a[i][0]=a[i][m+1]=-1;
    for (j=0;j<=m+1;++j)
        a[0][j]=a[n+1][j]=-1;
    Lee(x1,y1,r);
    Lee(x2,y2,jj);
    sol=n*m+1;
    for (i=1;i<=n;++i)
    for (j=1;j<=m;++j)
    if (r[i][j]==jj[i][j] && r[i][j]>0 && r[i][j]<sol) {
        sol=r[i][j];
        x=i;
        y=j;
    }
     g<<sol<<" "<<x<<" "<<y;
    return 0;
}