Cod sursa(job #2224498)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 24 iulie 2018 11:45:33
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
pair<int,int>x;
queue<pair<int,int> >dq;
int n,m,k,i,j,l[30000],c[30000],v[151][151],r,v2[151][151],v3[151][151],nr,chei[30000];
int main() {
    f>>n>>m>>k;
    nr=1;
    for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++) {
            v[i][j]=nr;
            v3[0][j]=1;
            v3[i][0]=1;
            v3[n+1][j]=1;
            v3[i][m+1]=1;
            if(v[i][j]==k) {
                x=make_pair(i,j);
                chei[k]=1;
                dq.push(x);
            }
            nr++;
            f>>v2[i][j];
        }
    }
    r=1;
    while(!dq.empty() && r==1) {
        nr=0;
        r=0;
        while(!dq.empty()) {
            l[++nr]=dq.front().first;
            c[nr]=dq.front().second;
            v3[l[nr]][c[nr]]=1;
            chei[v[l[nr]][c[nr]]]=1;
            dq.pop();
        }
        for(i=1; i<=nr; i++) {
            if(l[i]>1 && chei[v2[l[i]-1][c[i]]]==1 && v3[l[i]-1][c[i]]==0) {
                x=make_pair(l[i]-1,c[i]);
                dq.push(x);
                r=1;
            }
            if(l[i]<n && chei[v2[l[i]+1][c[i]]]==1 && v3[l[i]+1][c[i]]==0) {
                x=make_pair(l[i]+1,c[i]);
                dq.push(x);
                r=1;
            }
            if(c[i]>1 && chei[v2[l[i]][c[i]-1]]==1 && v3[l[i]][c[i]-1]==0) {
                x=make_pair(l[i],c[i]-1);
                dq.push(x);
                r=1;
            }
            if(c[i]<m && chei[v2[l[i]][c[i]+1]]==1 && v3[l[i]][c[i]+1]==0) {
                x=make_pair(l[i],c[i]+1);
                dq.push(x);
                r=1;
            }
            if(v3[l[i]+1][c[i]]==0 or v3[l[i]-1][c[i]]==0 or v3[l[i]][c[i]+1]==0 or v3[l[i]][c[i]-1]==0) {
                x=make_pair(l[i],c[i]);
                dq.push(x);
            }
        }
    }
    nr=0;
    for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++) {
            if(v3[i][j]==1) {
                nr++;
            }
        }
    }
    g<<nr<<'\n';
    return 0;
}