Cod sursa(job #1720440)

Utilizator ArkinyStoica Alex Arkiny Data 22 iunie 2016 15:46:20
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include<stdio.h>
#include<stdlib.h>

struct Node
{
	int data;
	struct Node *next;
}*A[100010];


int viz[100010],D[100010];
int queue[100010],q_st,q_f;

typedef struct Node Node;

Node *stk;


void push_list(Node **v, int data)
{
	Node *p = (Node*)malloc(sizeof(Node));
	p->data = data;
	p->next = *v;
	*v = p;
}



void bfs(int x)
{
	queue[++q_f] = x;
	++q_st;
	viz[x] = 1;
	
	while (q_st <= q_f)
	{
		int e = queue[q_st++];


		Node *p = A[e];

		while (p)
		{
			if (!viz[p->data])
			{
				D[p->data] = D[e] + 1;
				viz[p->data] = 1;
				queue[++q_f] = p->data;
			}

			p = p->next;
		}

	}
   

}


FILE *in, *out;


int main()
{

	int N, M,S, x, y, i;


	in = fopen("bfs.in", "r");
	out = fopen("bfs.out", "w");

	fscanf(in, "%d%d%d", &N, &M, &S);

	for (i = 1;i <= M;++i)
	{
		fscanf(in, "%d%d", &x, &y);

		push_list(&A[x], y);

	}

	bfs(S);

	for (int i = 1;i <= N;++i)
		if (D[i] == 0 && i != S)
			fprintf(out, "-1 ");
		else
			fprintf(out, "%d ", D[i]);

	return 0;
}