Cod sursa(job #191746)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 28 mai 2008 10:15:38
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#include<stdlib.h>
#define N 155
using namespace std;
int main(){
	int c[24000],lista[24000],a[N][N]={0};
	int m,n,i,j,k,sz,ok,e,v;
	freopen("castel.in","r",stdin);
	freopen("castel.out","w",stdout);
	scanf("%d%d%d",&m,&n,&k);
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			scanf("%d",&a[i][j]);
	for(i=1;i<=24000;i++)
		c[i]=0;
	ok=1;
	sz=1;
	c[k]=1;
	lista[1]=k;
	v=1;
	while(ok){
		ok=0;
		e=1;
		while(e<=v){
			k=lista[e];
			if (k%n){
				i=k/n+1;
				j=k-((i-1)*n);
			}
			else{
				i=k/n;
				j=n;
			}
			if (c[a[i-1][j]]==1&&c[k-n]==0&&i>1){
				c[k-n]=1;
				ok=1;
				sz++;
				lista[++v]=k-n;
			}
			if(c[a[i][j+1]]==1&&c[k+1]==0&&j<n){
				c[k+1]=1;
				ok=1;
				sz++;
				lista[++v]=k+1;
			}
			if(c[a[i+1][j]]==1&&c[k+n]==0&&i<m){
				c[k+n]=1;
				ok=1;
				sz++;
				lista[++v]=k+n;
			}
			if(c[a[i][j-1]]==1&&c[k-1]==0&&j>1){
				c[k-1]=1;
				ok=1;
				sz++;
				lista[++v]=k-1;
			}
			e++;
		}
	}
	printf("%d\n",sz);
	fclose(stdin);
	fclose(stdout);
	return 0;
}