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# (11)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Se citeste un graf orientat cu n varfuri si m arce, dat prin vestorul arcelor. Se citeste apoi un numar natural k mai mic decat n. Sa se afiseze nodurile care se afla la distanta k se nodul 1. Distanta de la un nod x la un nod y este egala cu numarul de arce din care este compus cel mai scurt drum de la nodul x la nodul y.
Ex: Pentru graful din imaginea alaturata, daca se citeste k=2 se afiseaza varfurile 2, 3 si 6.


#include<fstream.h>

int a[100][100],k,niv[100],n,m,p[100],x[100];

ifstream f("date.in");
ofstream g("date.out");

void citire()
 {int x,y,i;
 f>>n>>m;
  for(i=1;i<=m;i++)
   {f>>x>>y;
    a[x][y]=1;
   }
   f>>k;
 }

void bf(int r)
 {int s,d,i;
  s=1;d=1;
  p[r]=1;
  x[1]=r;
  niv[r]=0;
  while(s<=d)
   {for(i=1;i<=n;i++)
    if(!p[i] && a[x[s]][i])
     {d++;
      x[d]=i;
      p[i]=1;
      niv[i]=niv[x[s]]+1;
     }
    s++;
   }
 }

void main()
 {citire();
  bf(1);
  for(int i=1;i<=n;i++)
   if(niv[i]==k) g<<i<<" ";
 }

15 nov 2018
Site-ul conține 868 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian