Cod sursa(job #3337602)

Utilizator Octavian09Dore Octaviam Octavian09 Data 29 ianuarie 2026 09:20:07
Problema Castel Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>

using namespace std;
const int DMAX=150;

struct pozitie{
    short int x,y;
};

int M, N, K, nrCamere;
int H[DMAX+2][DMAX+2];
bool Key[DMAX*DMAX+1];
bool viz[DMAX+1][DMAX+1];

pozitie Q[DMAX*DMAX+1];
pozitie d[4]={{0,-1},{-1,0},{1,0},{0,1}};

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

void citire(){
    f >> M >> N >> K;
    for(int i=1;i<=M;i++)
        for(int j=1;j<=N;j++)
            f >> H[i][j];
}

pozitie pozCam(int nrCamera){
    pozitie poz;
    poz.x=nrCamera/N;
    if(nrCamera%N!=0) poz.x++;
    poz.y=nrCamera-(poz.x-1)*N;
    return poz;
}

inline int nrCam(pozitie poz){
    return (poz.x-1)*N+poz.y;
}

void Lee(){
    pozitie crt,vec;
    bool camNoua;
    int u=1;
    Key[K]=1;
    Q[1]=pozCam(K);
    do{
        camNoua=0;
        for(int i=1;i<=u;i++){
            crt=Q[i];
            for(int j=0;j<4;j++){
                vec.x=crt.x+d[j].x;
                vec.y=crt.y+d[j].y;
                if(viz[vec.x][vec.y]==0 && Key[H[vec.x][vec.y]]==1){
                    Key[nrCam(vec)]=1;
                    viz[vec.x][vec.y]=1;
                    Q[++u]=vec;
                    camNoua=1;
                    nrCamere++;
                }
            }
        }
    }while(camNoua!=0);
}

int main()
{
    citire();
    Lee();
    g << nrCamere;
    f.close();
    g.close();
    return 0;
}