Cod sursa(job #1106021)

Utilizator traian.vidrascutraian vidrascu traian.vidrascu Data 12 februarie 2014 12:46:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.91 kb
#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];
}