Cod sursa(job #1915445)

Utilizator gavrilas_narcisGavrilas Narcis Cristian gavrilas_narcis Data 8 martie 2017 21:02:25
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int const diri[]={-1,-1,-1,1,1,1,0,0};
int const dirj[]={0,1,-1,0,1,-1,1,-1};
int m, n,i,j,Ri, Rj, Ji,Jj,ii,jj,dir,mini, minj;
char ch[105];
int R[105][105], J[105][105];
queue <pair<int,int> >q;
int ok(int i, int j)
{
if(i>0 && j>0 && i<=n && j<=m)
return 1;
return 0;
}
void lee(int m[105][105], int iinc, int jinc)
{
q.push({iinc,jinc});
m[iinc][jinc]=1;
while(!q.empty())
{
i=q.front().first;
j=q.front().second;
q.pop();
for(dir=0; dir<8; dir++)
{
ii=i+diri[dir];
jj=j+dirj[dir];
if(ok(ii,jj) && R[ii][jj]!=-1 && m[ii][jj]>m[i][j]+1)
{
m[ii][jj]=m[i][j]+1;
q.push({ii,jj});
}
}
}
}
int main()
{
int minim=999999999;
fin>>n>>m;
fin.get();
for(i=1; i<=n; i++)
{
fin.getline(ch,105);
for(j=0; j<m; j++)
{
if(ch[j]==' ')
{
R[i][j+1]=999999999;
J[i][j+1]=999999999;
}
if(ch[j]=='X')
{
R[i][j+1]=-1;
J[i][j+1]=-1;
}
if(ch[j]=='R')
{
R[i][j+1]=2;
Ri=i;
Rj=j+1;
J[i][j+1]=999999999;
}
if(ch[j]=='J')
{
J[i][j+1]=2;
Ji=i;
Jj=j+1;
R[i][j+1]=999999999;
}
}
}
lee(R,Ri,Rj);
lee(J,Ji,Jj);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(R[i][j]>0 && R[i][j]==J[i][j] && R[i][j]<minim)
{
minim=R[i][j];
mini=i;
minj=j;
}
fout<<minim<<' '<<mini<<' '<<minj;
return 0;
}