Informatică, întrebare adresată de DenisF, 9 ani în urmă

Functie ce afişează gradul interior şi
gradul exterior al fiecărui nod dintr-un graf orientat C++

Cine imi da idei primeste "Cel mai bun raspuns"

Răspunsuri la întrebare

Răspuns de 1Viserys
2

Vrei doar idei sau si cod?


Idee: Construieste matricea de adiacenta a grafului, numeri fiecare cifra 1 de pe fiecare linie si fiecare coloana si ar trebui ca una din sume sa fie gradul intern si cealalta cel extern (depinde de cum vezi tu matricea, merge either way).


de exemplu, sa zicem ca ai graful orientat reprezentat de aceste perechi

(1->2), (1->3), (2->1).

poti construi matricea astfel: daca ai i->j pui 1 in Matrice[i][j] si 0 altfel

   1    2     3

1   0    1      1

2   1    0     0

3   0   0     0

sau transpusa ei = 1 in Matrice[j][i] daca ai i->j si 0 altfel.

eu folosesc prima varianta in care numarul de elemente nenule pe linia k reprezinta gradul extern al varfului k si numarul de elemente nenule de pe coloana k reprezinta gradul intern al varfului k.


daca ai nevoie de ajutor la implementare, da-mi un mesaj in privat sau comenteaza si revin.


Implementare C++

#include <iostream>

using namespace std;

int main()

{

int M[100][100], i, j, contor=0, n;

cin>>n;

for(i=1; i<=n; i++)

  {

   for(j=1; j<=n; j++)

      {

        cin>>M[i][j];

        contor=contor+M[i][j];

      }

    cout<<"Gradul extern al nodului "<<i<<" este "<<contor<<endl;

   contor=0;

}

for(i=1; i<=n; i++)

{

for(j=1; j<=n; j++)

{  

contor=contor+M[j][i];

}

cout<<"Gradul intern al nodului "<<i<<" este "<<contor<<endl;

contor=0;

}

return 0;

}


1Viserys: editez raspunsul si adaug si implementarea
DenisF: int main()
{
int grad_ext,grad_int;
citire();
cout<<"Nodurile cu grade exterioare sunt: \n";
for(i=1;i<=n;i++){
grad_ext=0;
for(j=1;j<=n;j++){
if(a[i][j]>0){
grad_ext++;
grade[i]--;
}
}
if(grad_ext>0){
cout<}
}
cout<<"Nodurile cu grade interioare sunt: \n";
for(j=1;j<=n;j++){
grad_int=0;
for(i=1;i<=n;i++){
if(a[i][j]>0){
grad_int++;
grade[j]++;
}
}
if(grad_int>0){
cout<
DenisF: Asta e codul pentru grade si citesc dintr-un fisier
DenisF: Okey, mersi
Incerc si maine iti raspund
1Viserys: pai tu vrei sa afisezi fiecare nod cu grad extern/ intern, nu? atunci if(grad_extern > 0) .. trebuie pus intre cele doua acolade inchise de deaspura, si in plus un grad_extern=0. analog si pt grad_intern, bagi if(grad_intern > 0) intre cele doua acolade inchise mai sus si apoi grad_intern=0. Amandoua initializariel cu 0 se fac tot in interiorul primului for.
1Viserys: cat despre tabloul grade, nu prea ma prind care e treaba cu el :))
DenisF: Ce tablou grade?
1Viserys: grade[i]--
1Viserys: sau grade[j]
DenisF: Am implementat codul tau și la afișare Ext si Int sunt aceleași
Alte întrebări interesante