Cod sursa(job #2319981)

Utilizator stefan1anubystefan popa stefan1anuby Data 13 ianuarie 2019 23:25:25
Problema Castel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");

#define nmax 170
vector < int > vec;
int m,n,k,chei,v[nmax][nmax],nev_chei[nmax*nmax],keys[nmax*nmax];
int dx[]= {0,0,1,-1};
int dy[]= {-1,1,0,0};
void read()
{
    int i;
    cin>>n>>m>>k;
    for(i=1; i<=n*m; i++)
        cin>>nev_chei[i];
}
bool Ok(int i,int j)
{
    if(i<1 || j<1 || i>n || j>m || v[i][j]==1)
        return false;
    return true;
}
void solve()
{
    int nr,deplasari=0,lin,col,lin2,col2,ok=0,i,d,sol=1;
    vec.push_back(k);
    lin=k/n+1;
    col=k%m;
    if(col==0)
        col=m;
    v[lin][col]=1;
    keys[k]=1;
    while(ok==0)
    {
        ok=1;
        for(i=vec.size()-1; i>=0; i--)
        {
            lin=vec[i]/n+1;
            col=vec[i]%m;
            if(col==0)
                col=m;
            deplasari=0;
            for(d=0; d<4; d++)
            {
                lin2=lin+dx[d];
                col2=col+dy[d];
                if(Ok(lin2,col2)==true && keys[nev_chei[(lin2-1)*m+col2]]==1)
                {
                    deplasari++;
                    vec.push_back((lin2-1)*m+col2);
                    keys[(lin2-1)*m+col2]=1;
                    v[lin2][col2]=1;
                    sol++;
                }
            }
            if(deplasari>0)
            {
                vec[i]=vec.back();
                vec.pop_back();
                ok=0;
            }
        }
    }
    cout<<sol;
}
int main()
{
    read();
    solve();
    return 0;
}