Cod sursa(job #2183520)

Utilizator Alexandru_StoianStoian Sorin Alexandru Alexandru_Stoian Data 23 martie 2018 11:10:32
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");

struct elem{
    int l, c;
}nr[23001];

struct Directii{
    int l,c;
}D[4]={{-1,0},{0,1},{1,0},{0,-1}};


int a[151][151],b[151][151];
int nrc,n,m,k,i0,j0,nrcamera;
bool key[23001];
bool ap[151][151];


bool verif(int i, int j){
    if(i<=0 || i>n || j<=0 || j>m) return 0;
    return 1;
}

void Lee_Castel(int i0, int j0){
    elem x,y;
    int lv, cv;
    x.l=i0;
    x.c=j0;
    int k=0;
    nr[++k]=x;
    key[b[i0][j0]]=1;
    ap[i0][j0]=1;
    bool ok=1;
    while(ok==1){
        ok=0;
        for(int i=1; i<=k; ++i) {
            for(int d=0; d<4; ++d){
                lv=nr[i].l+D[d].l;
                cv=nr[i].c+D[d].c;
                if(verif(lv, cv)){
                    if(key[a[lv][cv]]){
                        if(!ap[lv][cv]){
                            ++nrc;
                            ok=1;
                            x.l=lv; x.c=cv;
                            key[b[lv][cv]]=1;
                            ap[lv][cv]=1;
                            nr[++k]=x;
                        }
                    }
                }
            }
        }
    }
}

int main(){
    f>>n>>m>>k;
    for(int i=1; i<=n; ++i){
        for(int j=1; j<=m; ++j){
            f>>a[i][j];
            b[i][j]=++nrcamera;
            if(b[i][j]==k) i0=i, j0=j;
        }
    }
    nrc=1;
    elem y;
    y.l=1; y.c=1;
    Lee_Castel(i0, j0);
    g<<nrc<<"\n";
    return 0;
}