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)
Din fisierul graf.in se citeste un numar natural n (n<=100) si apoi muchiile unui graf neorientat conex cu n varfuri. Construiti un arbore partial al grafului dat si afisati in fisierul arbore.out vectorul de tati a acestui arbore avand radacina in varful 1.
Se poate afisa vectorul de tati al oricarui arbore partial cu radacina in varful 1.
exemplu:
graf.in
5
1 2
1 3
1 4
2 3
2 4
2 5
3 4
3 5
4 5
arbore.out
0 1 1 1 2

//transformare graf neorientat in arbore cu radacina 1
#include <fstream>
using namespace std;
ifstream fin("graf.in");
ofstream fout("arbore.out");
int A[101][101],n,T[101],P[101];

void citire()
{
    fin>>n;
    int x,y;
    while(fin>>x>>y)
        A[x][y]=A[y][x]=1;
}

void BF(int v)
{
    int st=1,dr=1,Q[101];
    Q[st]=v;
    P[v]=1;
    while(st<=dr)
    {
        int i=Q[st];
        for(int j=1;j<=n;j++)
            if(!P[j] && A[i][j]==1)
            {
                dr++;
                Q[dr]=j;
                T[j]=i;
                P[j]=1;
            }
        st++;
    }
}

void afisare()
{
    for(int i=1;i<=n;i++)
        fout<<T[i]<<" ";
}
int main()
{
    citire();
    BF(1);
    afisare();
    return 0;
}

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