Sunteți pe pagina 1din 5

Laborator 1 - AG Ivanciuc Gheorghe Stefan Grupa 231

I. Formularea problemei

Sa se conceapa un algoritm care sa faca conversia de la reprezentarea prin matricea de adiacenta a unui graf la reprezentarea prin lista predecesorilor.

II. Dezvoltarea algoritmului

Algoritmul de conversie din matricea de adiacenta in lista predecesorilor presupune efectuarea urmatorilor pasi: a. Citirea matricei de adiacenta a grafului. b. Crearea a 2 tablouri unidimensionale alfa si beta cu semnificatiile urmatoare: alfa vector de pozitii; alfa(i) reprezentand pozitia din beta de pe care incepe aparitia predecesorilor varfului i. beta vector de predecesori.

III. Descrierea algoritmului

In primul rand se citeste matricea de adiacenta. De asemenea avem grija ca alfa(1) sa ia valoarea 1. Apoi se parcurge aceasta matrice pe coloane si pentru fiecare valoare nenula intalnita se va adauga indicele liniei pe care se afla acea valoare in vectorul beta. La schimbarea coloanei se va retine in vetorul alfa pozitia ultimului element memorat in beta plus 1.

-1-

Laborator 1 - AG Ivanciuc Gheorghe Stefan Grupa 231


citeste n, A k:=1 pentru j := 1,n executa alfa(j) := k pentru i := 1,n executa daca aij != 0 atunci beta(k) := i k := k + 1 sfarsit daca sfarsit pentru sfarsit pentru alfa(n+1) := k

IV. Demonstrarea corectitudinii algoritmului

In primul rand am luat algoritmul din curs ) iar in al doilea: In elaborarea acestui algoritm folosim observatia ca fiecare valoare nenula din matricea de adiacenta defineste (refera) un arc si acesta defineste o pozitie in vectorul beta. Deci, numarul valorilor nenule din matricea de adiacenta este dimensiunea lui beta. Daca se parcurge matricea pe coloane valorile nenule depistate in ea, definesc predecesorii varfului atasat acelei. Daca se introduc acesti indici de linie succesiv in vectorul beta, acesta va contine multimile 1, 2,, n. La schimbarea coloanei se va retine in vetorul alfa pozitia ultimului element memorat in beta plus 1.

-2-

Laborator 1 - AG Ivanciuc Gheorghe Stefan Grupa 231

V. Cod sursa

public class Transform { private static int[][] A; private static int[] alfa; private static int[] beta; private static int nodes; private static void printA() { int i, j; for (i = 1; i <= nodes; i++) { for (j = 1; j <= nodes; j++) { System.out.print(A[i][j] + " "); } System.out.println(); } } private static void printList(int[] list, int length) { for (int i = 1; i <= length; i++) { System.out.print(list[i] + " "); } System.out.println(); } private static void init() throws IOException { Scanner in = new Scanner(System.in); System.out.println("Numarul de varfuri"); nodes = in.nextInt(); A = new int[nodes + 1][nodes + 1]; System.out.println("Introduceti matricea de adiacenta");

-3-

Laborator 1 - AG Ivanciuc Gheorghe Stefan Grupa 231

for (int i = 1; i <= nodes; i++) { for (int j = 1; j <= nodes; j++) { A[i][j] = in.nextInt(); } } beta = new int[nodes + 2]; alfa = new int[nodes * (nodes - 1) + 2]; in.close(); } public static void main(String[] arg) { int i, j; try { init(); } catch (IOException e) { System.out.println("Eroare la initializare"); e.printStackTrace(); } int nr = 1; for (j = 1; j <= nodes; j++) { beta[j] = nr; for (i = 1; i <= nodes; i++) if (A[i][j] != 0) { alfa[nr] = i; nr++; } } System.out.println("Matricea de adiacenta"); printA(); System.out.println("Sirul pozitilor predecesorilor"); printList(alfa, nr - 1); System.out.println("Sirul predecesorilor"); printList(beta, nodes); } }

-4-

Laborator 1 - AG Ivanciuc Gheorghe Stefan Grupa 231

VI. Date de test

Date de intrare 01110 00110 00001 00101 00000 010100 101100 010110 101000 001000 000000

Date de iesire a: 1 1 2 5 7 b: 1 1 2 4 1 2 3 4

a: 1 3 5 8 11 12 b: 2 4 1 3 2 4 5 1 2 3 3

-5-

S-ar putea să vă placă și