Pagini recente » Cod sursa (job #1152090) | Cod sursa (job #2181467) | Cod sursa (job #1108190) | Cod sursa (job #2428498) | Cod sursa (job #1778456)
#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;
}