Cod sursa(job #1778456)

Utilizator Bodo171Bogdan Pop Bodo171 Data 13 octombrie 2016 20:13:43
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=150;
vector< pair<int,int> > v[nmax*nmax+5];
int d1[]={-1,0,1,0};
int d2[]={0,-1,0,1};
int a[nmax+5][nmax+5];
bool explored[nmax*nmax+nmax+5];
int i,j,n,m,k,nr,lf,cf;
bool ok;
void explore(int li,int ci)
{
    if(li>n||ci>m||li==0||ci==0) return;
    if(explored[li*m+ci]==1&&ok==0)
        return;
    if(explored[li*m+ci]) ok=0;
    if((!explored[a[li][ci]])&&li*m+ci!=k+m)
     {v[a[li][ci]].push_back(make_pair(li,ci));return;}
    if(!explored[li*m+ci]){explored[li*m+ci]=1;nr++;}
    for(int i=0;i<v[li*m+ci].size();i++)
    {
        int x=v[li*m+ci][i].first,y=v[li*m+ci][i].second;
        explore(x,y);
    }
    for(int i=0;i<4;i++)
    {
        lf=li+d1[i];cf=ci+d2[i];
        explore(lf,cf);
    }
}
int main()
{
    ifstream f("castel.in");
    ofstream g("castel.out");
    f>>n>>m>>k;
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
    {
        f>>a[i][j];
        a[i][j]+=m;
    }
    int x=k/m+1;
    int y=k%m;
    if(y==0)
    {
        x--;y=m;
    }
    explored[x*m+y]=1;
    nr=1;ok=1;
    explore(x,y);
    g<<nr;
    return 0;
}