Cod sursa(job #1225976)

Utilizator tureanchristinetunich tureanchristine Data 4 septembrie 2014 11:18:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include <fstream>
#include <cstring>
//romeo si julieta labirint
using namespace std;
typedef struct {int lin,col;}elem;
elem c[1000],ps,v,p,pb,start;
int prim,ultim,k,i,j,m,lr[100][100],lj[100][100],n,r1,r2;
int j1,j2;
int dl[]={-1,0,1,0};
int dc[]={0,1,0,-1};
char c1[100];
void bordare(int l[100][100], int m, int n){
for(i=0;i<=m+1;i++){
l[i][0]=-1;
l[i][n+1]=-1;
}
for(i=1;i<=n;i++){
l[m+1][i]=-1;
l[0][i]=-1;
}
}

void lee(int l[100][100],int m,int n,elem ps){
    int ok=0;
    prim=ultim=1;
    c[1]=ps;
    l[ps.lin][ps.col]=1;
    while(prim<=ultim&&ok==0){
        p=c[prim];
        prim++;
        for(k=0;k<=3;k++){
        v.lin=p.lin+dl[k];
        v.col=p.col+dc[k];
        if(l[v.lin][v.col]==0)if(v.lin!=pb.lin||v.col!=pb.col){l[v.lin][v.col]=l[p.lin][p.col]+1;
                                ultim++;
                                c[ultim]=v;}
                                else {ok=1;l[v.lin][v.col]=l[p.lin][p.col]+1;
                                ultim++;
                                c[ultim]=v;}
        }
}
}

int main()
{ ifstream f("rj.in");
ofstream g("rj.out");
f>>m>>n;f.getline(c1,100);


for(i=1;i<=m;i++)
 {f.getline(c1,100);
   for(j=1;j<=n;j++)if(c1[j-1]=='X'){lr[i][j]=-1;lj[i][j]=-1;}
                            else if(c1[j-1]==' '){lr[i][j]=0;lj[i][j]=0;}
                                    else if(c1[j-1]=='R'){r1=i;r2=j;lj[i][j]=0;lr[i][j]=1;}
                                        else if(c1[j-1]=='J'){j1=i;j2=j;lr[i][j]=0;lj[i][j]=1;}}

bordare(lr,m,n);
bordare(lj,m,n);
start.lin=r1;start.col=r2;
lee(lr,m,n,start);
start.lin=j1;start.col=j2;
lee(lj,m,n,start);
int min=10000,q1,q2;

for(i=1;i<=m;i++)
    for(j=1;j<=n;j++){
    if(lr[i][j]==lj[i][j]&&lr[i][j]!=-1&&min>lr[i][j]){min=lr[i][j];q1=i;q2=j;}
    }


g<<q1<<' '<<q2<<' '<<min-1;

return 0;
}