using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace p22_BF
{//3.10.2013 - parcurgere in latime graf neorientat
class Program
{
static void BF(int n, int k, List<int>[] L)//parcurgere in latime
{
int[] x = new int[n + 1];//vectorul in care retin varfurile in ordinea parcurgerii (o coada)
bool[] p = new bool[n + 1];//vectorul in car retin daca un varf a fost vizitat sau nu
x[1] = k;//pornesc din k
p[k] = true;//k este vizitat
int s = 1, d = 1;//stanga, dreapta (simulez o coada pe x)
while (s <= d)//cat timp mai sunt elem in coada
{
foreach(int v in L[x[s]])//pentru fiecare nod adiacent
if (!p[v])//daca nu a fost vizitat
{
x[++d] = v;//il adaug in coada
p[v] = true;//il maerchez ca vizitat
}
s++;//avansez in coada
}
for (int i = 1; i <= d; i++) Console.Write(x[i] + " ");//afisez vectorul x
}
static void Main(string[] args)
{
List<int>[] L;//listele de adiacenta
StreamReader fin = new StreamReader("date.in");
int n = int.Parse(fin.ReadLine());//numarul de varfuri
int k = int.Parse(fin.ReadLine());//varful de porinre
L = new List<int>[n + 1];//creez lista de adiacenta
for (int i = 1; i <= n; i++)
L[i] = new List<int>();//creez lista pt fiecare nod
while (!fin.EndOfStream)
{
string linie = fin.ReadLine();//citesc o linie (muhie)
string[] s = linie.Split();//o despart
int i = int.Parse(s[0]);//primul varf din muchie
int j = int.Parse(s[1]);//al doilea varf fin muchie
L[i].Add(j);//adaug pe j ca adiacent cu i
L[j].Add(i);//adaug pe i ca adiacent cu j
}
BF(n, k, L);//apelez parcurgere
Console.ReadKey();
}
}
}
|