Cod sursa(job #1052075)
Utilizator | Data | 10 decembrie 2013 20:46:05 | |
---|---|---|---|
Problema | Rj | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.75 kb |
#include<fstream>
#include<iostream>
#include<cstdio>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
char s[110];
struct str{int lin,col;};
str ro,ju,coada[10999],v,w;
int dmin,x,y,mr[150][150],i,j,n,m,mj[150][150];
int dl[8]={-1,-1,0,1,1,1,0,-1};
int dc[8]={0,1,1,1,0,-1,-1,-1};
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin.get();
fin.get(s,m+1);
for(j=0;j<m;j++)
{
if(s[j]=='R')
{
ro.lin=i;
ro.col=j+1;
mr[ro.lin][ro.col]=1;
}
else
{
if(s[j]=='J')
{
ju.lin=i;
ju.col=j+1;
mj[ju.lin][ju.col]=1;
}
else
{
if(s[j]=='X')
{
mr[i][j+1]=-1;
mj[i][j+1]=-1;
}
}
}
}
}
for(i=0;i<=max(n,m);i++)
{
mr[0][i]=-1;
mr[n+1][i]=-1;
mr[i][0]=-1;
mr[i][m+1]=-1;
mj[0][i]=-1;
mj[n+1][i]=-1;
mj[i][0]=-1;
mj[i][m+1]=-1;
}
//afisare
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<mr[i][j]<<" ";
cout<<'\n';
}
//afisare
int l=0,r=0;
coada[0]=ro;
while(l<=r)
{
v=coada[l];
l++;
for(i=0;i<8;i++)
{
w.lin=v.lin+dl[i];
w.col=v.col+dc[i];
if(mr[w.lin][w.col]==0)
{
mr[w.lin][w.col]=mr[v.lin][v.col]+1;
r++;
coada[r]=w;
}
}
}
//afisare
cout<<'\n';
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{
if(mr[i][j]==-1)
cout<<"# ";
else
cout<<mr[i][j]<<" ";
}
cout<<'\n';
}
//afisare
l=0,r=0;
coada[0]=ju;
while(l<=r)
{
v=coada[l];
l++;
for(i=0;i<8;i++)
{
w.lin=v.lin+dl[i];
w.col=v.col+dc[i];
if(mj[w.lin][w.col]==0)
{
mj[w.lin][w.col]=mj[v.lin][v.col]+1;
r++;
coada[r]=w;
}
}
}
//afisare
cout<<'\n';
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{
if(mr[i][j]==-1)
cout<<"# ";
else
cout<<mj[i][j]<<" ";
}
cout<<'\n';
}
//afisare
dmin=1000000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(mr[i][j]!=-1&&mr[i][j]!=0&&mr[i][j]==mj[i][j])
{
if(mr[i][j]<dmin)
{
dmin=mr[i][j];
x=i;
y=j;
}
else
{
if(mr[i][j]==dmin)
{
if(i<x)
{
x=i;
y=j;
}
else
{
if(i==x)
{
if(j<y)
{
x=i;
y=j;
}
}
}
}
}
}
}
fout<<dmin<<" "<<x<<" "<<y<<'\n';
return 0;
}