Nu aveti permisiuni pentru a descarca fisierul grader_test3.in
Cod sursa(job #1945856)
Utilizator | Data | 29 martie 2017 18:33:28 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.36 kb |
#include <iostream>
#include <stdio.h>
using namespace std;
struct v{
int lin,col;
};
v coada[10001];
int julieta[101][101],romeo[101][101];
int linie[]={-1,-1,0,1,1,1,0,-1};
int colo[]={0,1,1,1,0,-1,-1,-1};
int main(){
FILE *fin,*fout;
fin=fopen("rj.in","r");
fout=fopen("rj.out","w");
int n,m,i,xr,xj,yr,yj,in,sf,lc,cc,l,c,lf,cf,minim,j;
char ch,inutil;
fscanf(fin,"%d%d%c",&n,&m,&inutil);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
fscanf(fin,"%c",&ch);
if(ch=='X')
romeo[i][j]=julieta[i][j]=-1;
if(ch=='R'){
xr=i;
yr=j;
}
if(ch=='J'){
xj=i;
yj=j;
}
}
fscanf(fin,"%c",&inutil);
}
for(i=0;i<=m+1;i++)
romeo[0][i]=romeo[n+1][i]=julieta[0][i]=julieta[n+1][i]=-1;
for(i=0;i<=n+1;i++)
romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=-1;
coada[1].lin=xr;
coada[1].col=yr;
romeo[xr][yr]=1;
in=sf=1;
while(in<=sf){
for(i=0;i<8;i++){
lc=coada[in].lin+linie[i];
cc=coada[in].col+colo[i];
if(romeo[lc][cc]==0){
sf++;
coada[sf].lin=lc;
coada[sf].col=cc;
romeo[lc][cc]=romeo[coada[in].lin][coada[in].col]+1;
}
}
in++;
}
coada[1].lin=xj;
coada[1].col=yj;
julieta[xj][yj]=1;
in=sf=1;
while(in<=sf){
for(i=0;i<8;i++){
lc=coada[in].lin+linie[i];
cc=coada[in].col+colo[i];
if(julieta[lc][cc]==0){
sf++;
coada[sf].lin=lc;
coada[sf].col=cc;
julieta[lc][cc]=julieta[coada[in].lin][coada[in].col]+1;
}
}
in++;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(julieta[i][j]!=romeo[i][j]||julieta[i][j]<1)
julieta[i][j]=10001;
minim=10001;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(julieta[i][j]<minim){
minim=julieta[i][j];
lf=i;
cf=j;
}
fprintf(fout,"%d %d %d",lf,cf,minim);
fclose(fin);
fclose(fout);
return 0;
}