Cod sursa(job #1841237)
Utilizator | Data | 5 ianuarie 2017 14:20:25 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.48 kb |
#include<iostream>
#include<fstream>
#include<queue>
#include<string.h>
using namespace std;
int ro[102][102],ju[102][102],n,m,dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},maxi;
queue<pair<int,int> >c;
bool ok(int i,int j)
{
if(i<1||i>n||j<1||j>m)
return 0;
return 1;
}
void lee(int a[102][102], int stx, int sty)
{
int i,j,iurm,jurm,dir;
while(!c.empty())
c.pop();
c.push(make_pair(stx,sty));
while(!c.empty())
{
i=c.front().first;
j=c.front().second;
c.pop();
for(dir=0;dir<8;dir++)
{
iurm=i+dl[dir];
jurm=j+dc[dir];
if(ok(iurm,jurm) && a[iurm][jurm]==0)
{
a[iurm][jurm]=a[i][j]+1;
maxi=a[iurm][jurm];
c.push(make_pair(iurm,jurm));
}
}
}
}
int main()
{
ifstream f("rj.in");
ofstream g("rj.out");
int i,j,srx,sry,sjx,sjy,maxr,maxj;
char ch[102];
bool k=0;
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.get(ch,102);
f.get();
for(j=0;j<strlen(ch);j++)
{
if(ch[j]=='X')
{
ro[i][j+1]=-1;
ju[i][j+1]=-1;
}
else if(ch[j]==' ')
{
ro[i][j+1]=0;
ju[i][j+1]=0;
}
else if(ch[j]=='R')
{
ro[i][j+1]=1;
ju[i][j+1]=0;
srx=i;
sry=j+1;
}
else if(ch[j]=='J')
{
ro[i][j+1]=0;
ju[i][j+1]=1;
sjx=i;
sjy=j+1;
}
}
}
lee(ro,srx,sry);
maxr=maxi;
lee(ju,sjx,sjy);
maxj=maxi;
if(maxr>maxj)
maxr=maxj;
for(maxi=1;maxi<=maxr&&k==0;maxi++)
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(ro[i][j]==ju[i][j] && ro[i][j]==maxi)
g<<maxi<<" "<<i<<" "<<j;
}
}
return 0;
}