Cod sursa(job #2159573)

Utilizator cristinahalmageanHalmagean Cristina cristinahalmagean Data 11 martie 2018 00:54:13
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int n,m,i,j,pi,ps,l,cool;
ifstream f("rj.in");
ofstream g("rj.out");
char a[100];
int di[9]={0,-1,-1,-1,0,0,1,1,1};
int dj[9]={0,-1,0,1,-1,1,-1,0,1};
int dmin=999999;
struct
{
    int nr,t;
}v[101][101];
struct
{
    int lin,col;
}c[10201];
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.get(a,100);
        f.get();
        for(j=0;j<m;j++)
        {
            if(a[j]=='X')
            v[i][j+1].nr=-1;
            if(a[j]=='R')
            {
                pi++;
                v[i][j+1].nr=1;
                v[i][j+1].t=1;
                c[pi].lin=i;
                c[pi].col=j+1;
            }
            if(a[j]=='J')
            {
                pi++;
                v[i][j+1].nr=1;
                v[i][j+1].t=2;
                c[pi].lin=i;
                c[pi].col=j+1;
            }
        }
    }
    ps=1;
    while(ps<=pi)
    {
        for(i=1;i<=8;i++)
        {
            if(c[ps].lin+di[i]>0&&c[ps].lin+di[i]<=n&&c[ps].col+dj[i]>0&&c[ps].col+dj[i]<=m)
            {
                if(v[c[ps].lin+di[i]][c[ps].col+dj[i]].nr==0)
            {
                pi++;
                c[pi].lin=c[ps].lin+di[i];
                c[pi].col=c[ps].col+dj[i];
                v[c[pi].lin][c[pi].col].nr=v[c[ps].lin][c[ps].col].nr+1;
                v[c[pi].lin][c[pi].col].t=v[c[ps].lin][c[ps].col].t;
            }
            else if(v[c[ps].lin+di[i]][c[ps].col+dj[i]].t!=v[c[ps].lin][c[ps].col].t&&v[c[ps].lin+di[i]][c[ps].col+dj[i]].nr==v[c[ps].lin][c[ps].col].nr+1&&v[c[ps].lin+di[i]][c[ps].col+dj[i]].nr!=-1)
                {
                    pi++;
                c[pi].lin=c[ps].lin+di[i];
                c[pi].col=c[ps].col+dj[i];
                v[c[pi].lin][c[pi].col].nr=v[c[ps].lin][c[ps].col].nr+1;
                v[c[pi].lin][c[pi].col].t=v[c[ps].lin][c[ps].col].t;
                    if(v[c[pi].lin][c[pi].col].nr<dmin)
                    {
                        dmin=v[c[pi].lin][c[pi].col].nr;
                        l=c[pi].lin;
                        cool=c[pi].col;
                    }
                    if(v[c[pi].lin][c[pi].col].nr==dmin)
                    {
                        if(c[pi].lin<l)
                        {
                            l=c[pi].lin;
                            cool=c[pi].col;
                        }
                        if(c[pi].lin==l)
                        {
                            if(c[pi].col<cool)
                            cool=c[pi].col;
                        }
                    }
            }
            }

        }
        ps++;
    }
    g<<dmin<<" "<<l<<" "<<cool;
    return 0;
}