Pagini recente » Cod sursa (job #1568646) | Cod sursa (job #2210859) | Cod sursa (job #2829275) | Cod sursa (job #2256286) | Cod sursa (job #1885573)
#include<iostream>
#include<fstream>
#include<cstring>
#include<queue>
using namespace std;
fstream fin("rj.in",ios::in), fout("rj.out",ios::out);
char q[105][105];
pair<int,int>R;
pair<int,int>J;
queue<pair<int,pair<int,int> > >D;
int n,m,p[105][105],d;
int di[]={-1,0,1,0}, dj[]={0,1,0,-1},drum=0;
void parcR()
{
int c;
pair<int,int>x;
while(!D.empty())
{
d=D.front().first;
x.first=D.front().second.first;
x.second=D.front().second.second;
for(c=0;c<=3;c++)
{
if(p[x.first+di[c]][x.second+dj[c]]==0)
{
p[x.first+di[c]][x.second+dj[c]]=p[x.first][x.second]+1;
D.push(make_pair(p[x.first+di[c]][x.second+dj[c]],make_pair(x.first+di[c],x.second+dj[c])));
}
}
D.pop();
}
}
void parcJ()
{
int c,d=1,ok=1;
pair<int,int>x;
while(!D.empty())
{
d++;
x.first=D.front().second.first;
x.second=D.front().second.second;
for(c=0;c<=3;c++)
{
if(p[x.first+di[c]][x.second+dj[c]]>0)
{
p[x.first+di[c]][x.second+dj[c]]=p[x.first+di[c]][x.second+dj[c]]-d;
if(p[x.first+di[c]][x.second+dj[c]]==0)
{
fout<<drum+1<<" "<<x.first+di[c]<<" "<<x.second+dj[c]<<"\n";
//fout<<drum<<" "<<x.first<<" "<<x.second<<"\n";
ok=0;
break;
}
D.push(make_pair(p[x.first+di[c]][x.second+dj[c]],make_pair(x.first+di[c],x.second+dj[c])));
}
}
if(ok==0)
{
break;
}
drum++;
D.pop();
}
}
int main()
{
int i,j;
fin>>n>>m;
fin.get();
for(i=0;i<n;i++)
{
fin.getline(q[i],105);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(q[i][j]=='X')
{
p[i+1][j+1]=-1;
}
if(q[i][j]=='R')
{
p[i+1][j+1]=1;
R.first=i+1;
R.second=j+1;
}
if(q[i][j]=='J')
{
p[i+1][j+1]=1;
J.first=i+1;
J.second=j+1;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
p[i][0]=-1;
p[i][m+1]=-1;
p[0][i]=-1;
p[n+1][i]=-1;
}
}
D.push(make_pair(p[R.first][R.second],make_pair(R.first,R.second)));
parcR();
D.push(make_pair(p[J.first][J.second],make_pair(J.first,J.second)));
parcJ();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fout<<p[i][j]<<" ";
}
fout<<"\n";
}
}