Cod sursa(job #357918)

Utilizator cristiprgPrigoana Cristian cristiprg Data 21 octombrie 2009 09:49:09
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include <cstdlib>

int *a[105], n, m;
FILE *f = fopen("bfs.in", "r");

void sterge()
{
	for (int i = 1; i <= n; i++)
		free(a[i]);
}

void bfs(int start)
{
	int v[105], i, k, cost[105];
	for (i = 1; i <= n; i++)
		v[i] = 0;
	v[start] = 1;
	int coada[105], st = 1, dr = 1;
	coada[1] = start;
	cost[start] = 0;
	while (st <= dr)
	{
		k = coada[st];
		printf("k = %d\n", k);
		for (i = 1; i <= a[k][0]; i++)
			if (!v[a[k][i]])
			{
				dr++;
				coada[dr] = a[k][i];
				v[a[k][i]] = 1;
				cost[a[k][i]] = cost[k] + 1;
			}
		st++;
	}
	
	printf("\ncosturi : \n");
	f = fopen("bfs.out", "w");
	for (i = 1; i <= n; i++)
		if (v[i])
			fprintf(f, "%d ", cost[i]);
		else
			fprintf(f, "-1 ");
	
}

int main()
{
	int start ;
	fscanf(f, "%d%d%d", &n, &m, &start);
	int k, i, j;
	
	for (i = 1; i <= n; i++)
	{
		a[i] =(int *) malloc(sizeof(int));
		a[i][0] = 0;
	}
	
	
	for (k =1; k <= m; k++)
	{
		fscanf(f, "%d%d", &i, &j);
		a[i][0]++;
		a[i] = (int *)realloc(a[i], sizeof(int) * (a[i][0] + 1));
		a[i][a[i][0]] = j;
		
		a[j][0]++;
		a[j] = (int *)realloc(a[j], sizeof(int) * (a[j][0] + 1));
		a[j][a[j][0]] =i;
		
	}
	
	fclose(f);
	
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= a[i][0]; j++)
			printf("%3d", a[i][j]);
		printf("\n");
	}
			
			
	
	bfs(start);
	sterge();
	
	
	
	return 0;        
	
		
}