Cod sursa(job #1140744)

Utilizator 0x7c00Gabriel Ciubotaru 0x7c00 Data 12 martie 2014 11:08:31
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.11 kb
#define _CRT_SECURE_NO_WARNINGS
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#define NAME "bfs"
#define OPEN f = fopen(NAME".in","r");g = fopen(NAME".out","w");
FILE *f,*g;

#define NAMX 100000

struct _NOD;
typedef struct _NOD NOD;

struct _NOD
{
	int n;
	NOD *nx;
};
int distance [NAMX];
int vis[NAMX];
NOD *graph[NAMX];

int n,m,s,i,dis,x,y;
NOD *p,*q,*r,*l1,*l2;
int main()
{
	OPEN;
	fscanf(f,"%d %d %d",&n,&m,&s);
	s--;
	for(i=0;i<m;i++)
	{
		fscanf(f,"%d %d",&x,&y);
		x--;
		y--;
		q = (NOD *)malloc(sizeof(NOD));
		q->n = y;
		q->nx = graph[x];
		graph[x] = q;
	}
	for(i=0;i<n;i++)
		distance[i] = -1;
	distance[s] = 0;
	vis[s] = 1;
	q = (NOD *)malloc(sizeof(NOD));
	q->nx = NULL;
	q->n = s;
	l1 = q;
	l2 = NULL;
	dis = 0;
	while(l1)
	{
		dis++;
		for(p = l1;p;p=p->nx)
			for(q = graph[p->n];q;q=q->nx)
				if(!vis[q->n])
				{
					vis[q->n] = 1;
					distance[q->n] = dis;
					r = (NOD *)malloc(sizeof(NOD));
					r->n = q->n;
					r->nx = l2;
					l2 = r;
				}
		l1 = l2;
		l2 = NULL;
	}
	for(i=0;i<n;i++)
		fprintf(g,"%d ",distance[i]);

}