Cod sursa(job #1506022)

Utilizator preda.andreiPreda Andrei preda.andrei Data 19 octombrie 2015 22:30:55
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

const short int modLin[8]={-1, 0, 1, 0, -1, 1, 1, -1};
const short int modCol[8]={0, 1, 0, -1, 1, 1, -1, -1};

int rom[101][101];
int jul[101][101];
short int cox[10001];
short int coy[10001];

void lee(int mat[][101], int sx, int sy, int fx, int fy, int n, int m){
    int k, kn;

    k=kn=1;
    cox[1]=sx;
    coy[1]=sy;
    mat[sx][sy]=1;
    while(k<=kn){
        for(int z=0; z<8; z++){
            sx=cox[k]+modLin[z];
            sy=coy[k]+modCol[z];
            if(sx>=1 && sx<=n && sy>=1 && sy<=m && (mat[sx][sy]>mat[cox[k]][coy[k]]+1 || mat[sx][sy]==0)){
                kn++;
                cox[kn]=sx;
                coy[kn]=sy;
                mat[sx][sy]=mat[cox[k]][coy[k]]+1;
            }
        }
        k++;
    }
}

    FILE *fin=fopen("rj.in", "r");
    FILE *fout=fopen("rj.out", "w");

void afis(int mat[][101], int n, int m){
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            fprintf(fout, "%2d ", mat[i][j]);
        }
        fprintf(fout, "\n");
    }
}

int main()
{
    char s[201];
    int n, m, rx, ry, jx, jy, tmin;

    fscanf(fin, "%d%d\n", &n, &m);
    for(int i=1; i<=n; ++i){
        fgets(s, 150, fin);
        if(s[strlen(s)-1]=='\n')
            s[strlen(s)-1]='\0';
        for(int j=0; j<strlen(s); j++){
            if(s[j]=='X')
                rom[i][j+1]=jul[i][j+1]=-1;
            else{
                if(s[j]=='R'){
                    rx=i;
                    ry=j+1;
                }
                else if(s[j]=='J'){
                    jx=i;
                    jy=j+1;
                }
            }
        }
    }

    lee(rom, rx, ry, jx, jy, n, m);
    lee(jul, jx, jy, rx, ry, n, m);

    //fprintf(fout, "Romeo\n");
    //afis(rom, n, m);
    //fprintf(fout, "\nJulieta\n");
    //afis(jul, n, m);

    rx=ry=0;
    tmin=10000000;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            if(rom[i][j]==jul[i][j] && rom[i][j]>0 && rom[i][j]<tmin){
                tmin=rom[i][j];
                rx=i;
                ry=j;
            }
        }
    }

    fprintf(fout, "%d %d %d", tmin, rx, ry);
    return 0;
}