Probleme de informatica - enunturi si rezolvari

Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (10)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Parcurgere in latime.
Din fisierul date.in se citeste un numar n reprezentand numarul de varfuri ale unui graf neorientat, iar apoi se citeste de pe linia urmatoare un varf k.
Pana la sfarsitul fisierului se citesc perechi de numere reprezentand muchiile grafului.
Parcurgeti in latime graful pornind din varful k.
Exemplu:
date.in
6
1
1 2
2 3
3 5
3 6
4 6
parcurgerea este 1 2 3 5 6 4


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();
        }
    }
}

21 aug 2018
Site-ul conține 867 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian