Cod sursa(job #1130396)

Utilizator CybiliniRadulescu Serban-Petru Cybilini Data 28 februarie 2014 13:03:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

char q[101];
int n,m,i,j,ri,rj,ji,jj;
short l[101][101];
short c[100][2],cj[101][2],sr,sj;
short d[]={-1,1,-1,0,1,0,1,-1};
short o[]={-1,1,0,-1,0,1,-1,1};


void citire()
{ ifstream f("rj.in");
f>>n>>m;
for(i=1;i<=n;i++)
{f.get();f.get(q,101);
for(j=1; j<=m;j++)
{

   if(q[j-1] =='X' )  l[i][j]=-1;
   // if(q[j-1] ==' ' )  l[i][j]=0;
    if(q[j-1] =='R' ) {ri=i;rj=j;}
      if(q[j-1] =='J' ) {ji=i;jj=j;}
     }}}
ofstream g("rj.out");
void afis()
{
    for(i=1;i<=n;i++) { for(j=1;j<=m;j++)
  g<<l[i][j]<<" ";
    g<<endl;
   } }

int valid(int li, int co )
{ return li>0 && co>0 && li<=n && co<=m &&l[li][co]==0;}

void adaur(int x, int y)
{ sr++; c[sr][0]=x;c[sr][1]=y;}
void adauj(int x, int y)
{ sj++; cj[sj][0]=x;cj[sj][1]=y;}

int main()
{  citire();

adaur(ri,rj);
int k=1;
adauj(ji,jj);
l[ji][jj]=2;
l[ri][rj]=1;
int inc=1;
int inj=1;
int ga=0;
while( !ga )
   { for(i=0;i<8;i++)
       { if( l[c[inc][0]+d[i]][c[inc][1]+o[i]]==2 && !ga){ri=c[inc][0]+d[i]; rj=c[inc][1]+o[i]; inc=sr+1; ga=1;}else
        if(valid(c[inc][0]+d[i],c[inc][1]+o[i])){
l[c[inc][0]+d[i]][c[inc][1]+o[i]]= 1;k++;
 adaur(c[inc][0] + d[i],c[inc][1] + o[i]);
    }}inc++;
    for(i=0;i<8;i++)
       { if( l[cj[inj][0]+d[i]][cj[inj][1]+o[i]]==1 &&!ga){ri=cj[inj][0]+d[i];rj=cj[inj][1]+o[i];ga=1; inj=sj+1;}
         else  if(valid(cj[inj][0]+d[i],cj[inj][1]+o[i])){
l[cj[inj][0]+d[i]][cj[inj][1]+o[i]]= 2;
 adauj(cj[inj][0] + d[i],cj[inj][1] + o[i]);
    }}inj++;}




//g<<inc<<" "<<sr<<"\n";
g<<k<<" "<<ri<<" "<<rj;
   g<<"\n"; afis();


    cout << "Hello world!" << endl;
    return 0;
}