Cod sursa(job #277063)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 11 martie 2009 14:50:15
Problema Castel Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
#define max 200
int a[max][max];
int m,n,k,i,j, x;
char kulcs[max*max]={0};
int mut=0, sum,mu;
struct s{int i; int j;};
s szomszed[max*max];

int main()
{ 
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]);
kulcs[k]='1';
i=k/n+1;
j=k-(i-1)*n;
a[i][j]=0;
if(i-1>=1&&a[i-1][j]!=0)
	{
	szomszed[++mut].i=i-1;
	szomszed[mut].j=j;
	}
if(i+1<=m&&a[i+1][j]!=0)
	{
	szomszed[++mut].i=i+1;
	szomszed[mut].j=j;
	}
if(j-1>=1&&a[i][j-1]!=0)
	{
	szomszed[++mut].i=i;
	szomszed[mut].j=j-1;
	}

if(j<=n&&a[i][j+1]!=0)
	{
	szomszed[++mut].i=i;
	szomszed[mut].j=j+1;
	}
do{
mu=0;
for(x=1;x<=mut;x++)
	{sum=(szomszed[x].i-1)*n+szomszed[x].j;
	if(kulcs[a[szomszed[x].i][szomszed[x].j]]=='1')
		{mu=1;
		kulcs[sum]='1';
		i=szomszed[x].i;
		j=szomszed[x].j;
		a[i][j]=0;
		if(i-1>=1&&a[i-1][j]!=0)
			{
			szomszed[++mut].i=i-1;
			szomszed[mut].j=j;
			}
		if(i+1<=m&&a[i+1][j]!=0)
			{
			szomszed[++mut].i=i+1;
			szomszed[mut].j=j;
			}
		if(j-1>=1&&a[i][j-1]!=0)
			{
			szomszed[++mut].i=i;
			szomszed[mut].j=j-1;
			}

		if(j<=n&&a[i][j+1]!=0)
			{
			szomszed[++mut].i=i;
			szomszed[mut].j=j+1;
			}
		}
	}
}while(mu==1);
sum=0;
for(i=1;i<=m;i++)
	for(j=1;j<=n;j++)
		if(a[i][j]==0)
			sum++;
printf("%d", sum);
return 0;
}