CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
: | |
Codificarea arborilor
Definitie: Un graf G = (V, E) este arbore daca si numai daca G este conex si aciclic.
Sa se realizeze un program pentru codificarea Neville a arborilor.
Codificarea Neville
Fie T = (V, E) un arbore. V - multimea varfurilor care apartin arborelui T, E - multimea muchiilor arborelui T.
V =
Codificare Neville: se da un arbore T si in urma codificarii Neville obtinem un vector cod.
Algoritm:
Exemplu:
Varf | ||||||||
Vector |
Implementarea algoritmului:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<conio.h>
using namespace std;
int m[100][100],c[100];
int codificare_neville(int n)
if( s == 1 )//daca am gasit un nod de gradul 1 adaugam in vectorul cod
for(i = 0;i < p; i++)//stergem nodul de grad 1(facand 0 pe linia si coloana respectiva)
for(j = 0;j < n; j++)
}
return k;
void afisare(int k)
int main()
afisare( codificare_neville(n) );
system('pause');
getch();
return 0;
Exemplu:
Input:
Output: 2 1 1 2 4 5 2 4
Sa se realizeze un program pentru decodificarea Neville a arborilor.
Decodificarea Neville
Inainte de prezenta algoritmul de decodificare trebuie precizate cateva observatii.
Observatii:
Avem V = - multimea varfurilor arborelui care trebuie construit in urma vectorului cod.
Decodificare Neville: se da un vector cod si in urma aplicarii algoritmului de decodificare rezulta un arbore.
Algoritm:
Exemplu:
Etapa I:
V =
V | ||||||||||
COD | ||||||||||
S = V - C |
Muchiile obtinute: (2,3) ; (1,6) ; (1,7) ; (2,8) ; (4,9) ; (5,10).
Etapa a II-a:
V = V - S |
| |||
COD | ||||
S = V - C |
Muchiile obtinute: (1,2) ; (4,5).
Etapa a III-a:
V = V - S =
C = Ø.
Ultima muchie: (2,4)
Implementarea algoritmului:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int m[100][100],c[100],v[100];
int decodificare_neville(int l,int n)
}
for( i = 0;i < p;i++ )
for(i = 0;i < p; i++)
k += p; //ca sa stim unde am ramas in c(cod) si sa nu mai parcurgem odata
p = 0;//p=nr de elemente ale lui s.inainte de a-l creea din nou trebuie ca p sa fie 0
}
m[ v[0]-1 ][ v[1]-1 ] = 1; //creez muchia n-1 cu ultimele doua noduri ramase in v
m[ v[1]-1 ][ v[0]-1 ] = 1;
//afisarea matricei de adiacenta corespunzatoare arborelui creat
for( i = 0;i <n ; i++ )
return 0;
int main()
Exemplu:
Input: 2 1 1 2 4 5 2 4
Output:
Sa se realizeze un program pentru codificarea Pruffer a arborilor.
Codificarea Pruffer
Fie T = (V, E) un arbore. V - multimea varfurilor care apartin arborelui T, E - multimea muchiilor arborelui T.
V =
Codificare Pruffer: se da un arbore T si in urma codificarii Neville obtinem un vector cod.
Algoritmul are n-2 pasi:
Observatie: In ultimele 2 varfuri ramase exista varful cu eticheta maxima.
In continuare prezentam pasii care trebuiesc facuti pentru a obtine vectorul cod in urma aplicarii algoritmului lui Pruffer:
X1 = 3; C1 = 2; T = T - ;
X2 = 6; C2 = 1; T = T - ;
X3 = 7; C3 = 1; T = T - ;
X4 = 1; C4 = 2; T = T - ;
X5 = 8; C5 = 2; T = T - ;
X6 = 2; C6 = 4; T = T - ;
X7 = 9; C7 = 4; T = T - ;
X8 = 4; C8 = 5; T = T - ;
COD = 2 1 1 2 2 4 4 5.
Implementarea algoritmului:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
int m[100][100],c[100];
int codificare_pruffer(int n)
if( s == 1 )
return k;
void afisare(int k)//afisam vectorul cod
int main()
afisare( codificare_pruffer(n) );
system('pause');
getch();
return 0;
Exemplu:
Input:
Output: 2 1 1 2 2 4 4 5
Sa se realizeze un program pentru decodificarea Pruffer a arborilor.
Decodificarea Pruffer
Inainte de prezenta algoritmul de decodificare trebuie precizate cateva observatii.
Observatii:
Avem V = - multimea varfurilor arborelui care trebuie construit in urma vectorului cod.
Decodificare Pruffer: se da un vector cod si in urma aplicarii algoritmului de decodificare rezulta un arbore.
Algoritmul are n-2 pasi si inca o operatie:
Implementarea algoritmului:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<conio.h>
using namespace std;
int m[100][100],c[100],v[100];
int decodificare_pruffer(int l,int n)
m[ c[k]-1 ][ s ] = 1;//creem muchia cu primul element din cod si varful gasit anterior
m[ s ][ c[k]-1 ] = 1;
o++;//crestem numarul de muchii create.
for(i = 0;i < nr; i++) if(v[i] == s+1)//cautam pozitia pe care se afla s
for(i = s;i < nr-1; i++) v[i] = v[i+1];// calculam v=v-s
nr--;//scadem nr de elemente ale lui v
k+=1; //memoram pozitia din cod
m[ v[0]-1 ][ v[1]-1 ]=1;//cream muchia n-1 cu ultimele doua noduri ramase in v
m[ v[1]-1 ][ v[0]-1 ]=1;
//afisarea matricei de adiacenta corespunzatoare arborelui creat
for( i = 0;i < n; i++ )
return 0;
int main()
for( i = 0;i < n; i++ ) v[i] = i+1;//cream V
for(i = 0;i < n; i++)
for(j = 0;j < n; j++) m[i][j] = 0;//initializam matricea de adiacenta cu 0
decodificare_pruffer(l,n);
system('pause');
getch();
return 0;
Exemplu:
Input:
Output:
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2486
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved