Cod sursa(job #59929)

Utilizator a7893Nae Mihai a7893 Data 11 mai 2007 11:16:48
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<stdio.h>
#define N 150*150
const int dx[]={-1,0,1,0};
const int dy[]={0,1,0,-1};
int c[200][200],m,n,k,v[N+1],xi,yi,k1;
struct mat
{
	int ch,inf;
}a[200][200];
struct coad{
	int x,y;
}coada[N];
void coords(int k)
{
	int i,j,ok=1;
	for(i=1;i<=m&&ok;i++)
		for(j=1;j<=n&&ok;j++)
			if(a[i][j].ch==k)
			{
				xi=i;
				yi=j;
				ok=0;
			}
}
void init(int c[200][200])
{
	int i,j;
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			c[i][j]=0;
}
void citire()
{
	FILE *f=fopen("castel.in","r");
	int i,j,k1=1;
	fscanf(f,"%d%d%d",&m,&n,&k);
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
		{
			fscanf(f,"%d",&a[i][j].inf);
			a[i][j].ch=k1++;
		}
	for(i=0;i<=m+1;i++)
		c[i][0]=c[i][n+1]=1;
	for(j=0;j<=n+1;j++)
		c[0][j]=c[m+1][j]=1;
	coords(k);
	v[a[xi][yi].ch]=1;
}
void rez()
{
	int x1,y1,x2,y2,ic,i,aux;
	coada[k1].x=xi;
	coada[k1++].y=yi;
	c[xi][yi]=1;
	do
	{
		aux=0;
		for(ic=0;ic<k1;ic++)
		{
			x1=coada[ic].x;
			y1=coada[ic].y;
			for(i=0;i<4;i++)
			{
				x2=x1+dx[i];
				y2=y1+dy[i];
				if(!c[x2][y2]&&v[a[x2][y2].inf])
				{
					coada[k1].x=x2;
					coada[k1++].y=y2;
					c[x2][y2]=1;
					v[a[x2][y2].ch]=1;
					aux=1;
				}
			}
		}	
	}while(aux);
}
void afis()
{
	FILE *g=fopen("castel.out","w");
	int i,nr=0;
	for(i=1;i<=N;i++)
		if(v[i])
			nr++;
	fprintf(g,"%d",nr);
}
int main()
{
	citire();
	rez();
	afis();
	return 0;
}