Cod sursa(job #3223190)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 12 aprilie 2024 16:57:47
Problema Castel Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
int t,a[152][152],ip,jp,sol,n,m,k,dx[]={-1,0,1,0},dy[]={0,1,0,-1};
bool fr[150*150+2],ok;
struct coada{
    int l,c;
};
queue<coada>q[2];
bool inside(int l,int c){
    return l>0&&l<=n&&c>0&&c<=m;
}
int main()
{
    cin>>n>>m>>k;
    if(k%m==0)
        ip=k/m,jp=m;
    else
        ip=k/m+1,jp=k%m;
    t=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    fr[k]=ok=1;
    q[t].push({ip,jp});
    a[ip][jp]=-1;/// am fost in camera respectiva
    sol++;
    while(ok){
        ok=0;
        while(!q[t].empty()){
            int l=q[t].front().l,c=q[t].front().c,v=4;
            q[t].pop();
            for(int i=0;i<4;i++){
                int lv=l+dx[i],cv=c+dy[i];
                if(inside(lv,cv)){
                    if(fr[a[lv][cv]]){
                        if(a[lv][cv]!=-1){
                            ok=1;
                            fr[(lv-1)*m+cv]=1;
                            a[lv][cv]=-1;
                            q[t].push({lv,cv});
                            sol++;
                        }
                        v--;
                    }
                }else
                    v--;
            }
            if(v!=0)
                q[1-t].push({l,c});
        }
        t=1-t;
    }
    /*for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            cout<<a[i][j]<<" ";
        cout<<'\n';
    }*/
    cout<<sol;
    return 0;
}