Cod sursa(job #2002973)

Utilizator maria15Maria Dinca maria15 Data 21 iulie 2017 12:40:35
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <fstream>

using namespace std;
int dmaxloc;
char di[] = {1, 0, -1, 0};
char dj[] = {0, 1, 0, -1};
char d;
int dmax=1;
short int v[176][176];
short int c[2][176*176];
short int istart, jstart, ifinal, jfinal, i, j, n, nr, a[1001][1001], b, ic, jc, iv, jv, p, u, sol, m, ii, jj;
ifstream fin("alee.in");
ofstream fout("alee.out");

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++){
            fin>>d;
            //if(c=='.')
              //  v[i][j]=0;
            if(d=='D'){
                v[i][j] = -2;
                c[0][++u]=i;
                c[1][u]=j;
            }
            if(d=='*')
                v[i][j] = -1;
            if(d=='I'){
                v[i][j]=1;
                istart=i;
                jstart=j;
            }
            if(d=='O'){
                ifinal=i;
                jfinal=j;
            }
        }
    p=u=1;

    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        for(i=0;i<=3;i++){
            iv=ic+di[i];
            jv=jc+dj[i];
            if(iv>=1 && iv<=n && jv>=1 && jv<=m && v[iv][jv]==0){
                v[iv][jv]=v[ic][jc]+1;
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
            }
        }
        p++;
    }

    p=u=1;
    c[0][1]=istart;
    c[1][1]=jstart;
    a[istart][jstart]=1;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        dmaxloc=-1;
        for(i=0;i<=3;i++){
            iv=ic+di[i];
            jv=jc+dj[i];
            if(iv>=1 && iv<=n && jv>=1 && jv<=m && v[iv][jv]>=0 && a[iv][jv]==0){
                if(v[iv][jv]>dmaxloc){
                    dmaxloc=v[iv][jv];
                    ii=iv;
                    jj=jv;
                }

            }
         }
         u++;
         c[0][u]=ii;
         c[1][u]=jj;
         a[ii][jj]=1;

         if(dmax<dmaxloc)
            dmax=dmaxloc;
         if(ii==ifinal && jj==jfinal)
            break;
        p++;
    }
    fout<<dmax;
    return 0;
}