Cod sursa(job #720015)

Utilizator netedu_andreiFII Andrei Netedu netedu_andrei Data 22 martie 2012 11:42:56
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<queue>

using namespace std;

struct nod{
long i;
long j;
};
queue<nod> q;
long ch[25001],viz[151][151],a[151][151],i,j,n,m,k,ok,z,nrc,d1[4],d2[4];
nod pas,pasa,p[25001];

int main()
{
	freopen("castel.in","r",stdin);
	freopen("castel.out","w",stdout);
	scanf("%ld %ld %ld",&n,&m,&k);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			scanf("%ld",&a[i][j]);
	
	d1[0]=1; d1[2]=-1; d2[1]=1; d2[3]=-1;
	pas.i=m%k+1;
	pas.j=k/m+1;
	ch[k]=1;
	viz[pas.i][pas.j]=1;
	q.push(pas);
	nrc=1;
	
	ok=1;
	while(ok!=0)
	{
		ok=0; z=0;
		while(!q.empty())
		{
			pas=q.front();
			for(i=0;i<=3;i++)
				if(ch[a[pas.i+d1[i]][pas.j+d2[i]]]==1 && viz[pas.i+d1[i]][pas.j+d2[i]]==0)
				{
					viz[pas.i+d1[i]][pas.j+d2[i]]=1;
					ch[m*(pas.i+d1[i]-1)+pas.j+d2[i]]=1;
					pasa.i=pas.i+d1[i];
					pasa.j=pas.j+d2[i];
					nrc++;
					ok=1;
					q.push(pasa);
				}
			q.pop();
			z++;
			p[z]=pas;
		}
		for(i=1;i<=z;i++)
			q.push(p[i]);
	}
	printf("%ld\n",nrc);
	return 0;
}