Cod sursa(job #2490450)
Utilizator | Data | 10 noiembrie 2019 12:15:57 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 3.09 kb |
#include <stdio.h>
#include<string.h>
#include<queue>
using namespace std;
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int Rx,Ry,Jx,Jy;
int n,m;
int oras[101][101];
int oras1[101][101];
int di[9]={0,0,1,-1,-1,-1,1,1};
int dj[9]={1,-1,0,0,-1,1,-1,1};
queue<pair<int,int> >coada;
void citire()
{
char c;
fscanf(f,"%d%d\n",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
fscanf(f,"%c",&c);
if(c=='\n')
fscanf(f,"%c",&c);
if(c=='X')
oras[i][j]=-1,oras1[i][j]=-1;
if(c=='R')
Rx=i,Ry=j;
if(c=='J')
Jx=i,Jy=j;
}
}
}
bool OK(int i,int j)
{
if(i<1||j<1||i>n||j>m)
return false;
if(oras[i][j]==-1)
return false;
return true;
}
void Lee()
{
int i,j,iu,ju;
oras[Rx][Ry]=1;
coada.push(make_pair(Rx,Ry));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int dr=0;dr<=7;dr++)
{
iu=i+di[dr];
ju=j+dj[dr];
if(OK(iu,ju)&&oras[iu][ju]==0)
{
oras[iu][ju]=oras[i][j]+1;
coada.push(make_pair(iu,ju));
}
}
}
oras1[Jx][Jy]=1;
coada.push(make_pair(Jx,Jy));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int dr=0;dr<=7;dr++)
{
iu=i+di[dr];
ju=j+dj[dr];
if(OK(iu,ju)&&oras1[iu][ju]==0)
{
oras1[iu][ju]=oras1[i][j]+1;
coada.push(make_pair(iu,ju));
}
}
}
int max=0,xm,ym;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(oras1[i][j]==oras[i][j]&&oras[i][j]!=-1)
if(max>oras[i][i]||max==0)
max=oras[i][j],xm=i,ym=j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%d ",oras[i][j]);
printf("\n");
}
printf("\n\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%d ",oras1[i][j]);
printf("\n");
}
fprintf(g,"%d %d %d",max,xm,ym);
}
int main()
{
citire();
Lee();
}