Pagini recente » Cod sursa (job #1825772) | Cod sursa (job #95306) | Cod sursa (job #2604278) | Cod sursa (job #2424097) | Cod sursa (job #1106021)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue <int> coada,coada1;
char h[105][105];
int n,m,dis[105][105],x1,x2,y1,y2,k1,k2;
void bfs(int x,int y,int a, int b )
{ int c,t;
coada.push(x*1000+y);
coada1.push(a*1000+b);
while (coada.size()>0 && coada1.size()>0)
{ c=coada.front();
if(h[c/1000+1][c%1000]==' '&& dis[c/1000+1][c%1000]== 0)
{
coada.push(c/1000*1000+c%1000);
dis[c/1000+1][c%1000]=dis[c/1000][c%1000]+1;
}
if(h[c/1000-1][c%1000]==' ' && dis[c/1000-1][c%1000]== 0)
{
coada.push(c/1000*1000+c%1000);
dis[c/1000-1][c%1000]=dis[c/1000][c%1000]+1;
}
if(h[c/1000][c%1000+1]==' '&& dis[c/1000][c%1000+1]== 0)
{
coada.push(c/1000*1000+c%1000);
dis[c/1000][c%1000+1]=dis[c/1000][c%1000]+1;
}
if(h[c/1000][c%1000-1]==' ' && dis[c/1000][c%1000-1]== 0)
{
coada.push(c/1000*1000+c%1000);
dis[c/1000+1][c%1000-1]=dis[c/1000][c%1000]+1;
}
coada.pop();
t=coada1.front();
if(h[t/1000+1][t%1000]==' '&& dis[t/1000+1][t%1000]== 0)
{
coada1.push((t/1000*1000+t%1000)*10);
dis[t/1000+1][t%1000]=dis[t/1000][t%1000]+1;
}
if(h[t/1000-1][t%1000]==' ' && dis[t/1000-1][t%1000]== 0)
{
coada1.push((t/1000*1000+t%1000)*10);
dis[t/1000-1][t%1000]=dis[t/1000][t%1000]+1;
}
if(h[t/1000][t%1000+1]==' ' && dis[t/1000][t%1000+1]== 0)
{
coada1.push((t/1000*1000+t%1000)*10);
dis[t/1000][t%1000+1]=dis[t/1000][t%1000]+1;
}
if(h[t/1000][t%1000-1]==' ' && dis[t/1000][t%1000-1]== 0)
{
coada1.push((t/1000*1000+t%1000)*10);
dis[t/1000+1][t%1000-1]=dis[t/1000][t%1000]+1;
}
coada1.pop();
if(h[c/1000+1][c%1000]==' '&& dis[c/1000+1][c%1000]> 10000 && k2>c%1000)
{
k1=c/1000+1;
k2=c%1000;
}
if(h[c/1000-1][c%1000]==' ' && dis[c/1000-1][c%1000]> 10000 && k2>c%1000)
{
k1=c/1000-1;
k2=c%1000;
}
if(h[c/1000][c%1000+1]==' ' && dis[c/1000][c%1000+1]> 10000 && k2>c%1000+1)
{
k1=c/1000;
k2=c%1000+1;
}
if(h[c/1000][c%1000-1]==' ' && dis[c/1000][c%1000-1]> 10000 && k2>c%1000-1 )
{
k1=c/1000;
k2=c%1000-1;
}
}
return;
}
int main ()
{ int i,j;
k2=105;
f>>n>>m;
for(i=1;i<=n;i++)
f.getline(h[i],200);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(h[i][j]=='R')
{
x1=i;
y1=j;
}
if(h[i][j]=='J')
{
x2=i;
y2=j;
}
bfs(x1,y1,x2,y2);
}
g<<k1<<" "<<k2<<" "<<dis[k1][k2];
}