Cod sursa(job #1984376)

Utilizator mirunafrancescaMiruna mirunafrancesca Data 24 mai 2017 17:12:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <stdio.h>
using namespace std;

#define MAX 100

struct cord
{
    int x, y;
};
int n, m;
int a[MAX][MAX], b[MAX][MAX];
cord r,j,vr[MAX*MAX], vj[MAX*MAX], sf, x;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};

int valid(int x, int y)
{
    if(x<=n && x>=1 && y>=1&& y<=m)
        return 1;
    return 0;
}

void rj(int x, int y, int a[][100], cord v[])
{   int p=1, c=1;
    v[p].x=x;
    v[p].y=y;
    a[x][y]=1;
    while((x!=sf.x || y!=sf.y) && c<=p)
    {
        for(int i=0; i<4; i++)
        {
           if(valid(x+dx[i],y+dy[i]) && a[x+dx[i]][y+dy[i]]==0)
            {
                p++;
                v[p].x=x+dx[i];
                v[p].y=y+dy[i];
                a[x+dx[i]][y+dy[i]]=a[x][y]+1;
            }
        }
        c++;
        x=v[c].x;
        y=v[c].y;

    }
}

void copy(int a[][100], int b[][100], int n, int m)
{
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        b[i][j]=a[i][j];
}

int comp(int a[][100], int b[][100], cord &x)
{
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(a[i][j]==b[i][j] && a[i][j]>1)
            {   x.x=i;
                x.y=j;
                return a[i][j];
            }
    return -1;
}
int main()
{
    freopen("rj.in", "r", stdin);
    freopen("rj.out", "w", stdout);

    scanf("%d %d \n", &n, &m);
    char z;
    for(int i=1; i<=n; i++)
    {
        for(int c=1; c<=m; c++)
         {
             scanf("%c",&z);
             if(z=='R'){ r.x=i; r.y=c; a[i][c]=1;}
             if(z=='J'){ j.x=i; j.y=c; a[i][c]=1;}
             if(z=='X')a[i][c]=-1;
         }

        scanf("\n");

    }

    copy(a,b,n,m);
    rj(r.x,r.y,b,vr);
    rj(j.x,j.y,a,vj);
    comp(a,b,x);
    cout<<x.x<<" "<<x.y<<" "<<comp(a,b,x);

    return 0;

}