Professional Documents
Culture Documents
Techniki programowania
Wprowadzenie do zadania 1
Graf
G = ( V, E )
Digraf
D = ( V, A )
Różne grafy
Modelowanie grafowe
Sieci społecznościowe
Reprezentacje grafów
4 3
0 1 2 3 4 5
6
0 0 1 1 1 0 0
1 1 0 1 0 1 0 3
2 1 1 0 0 0 1
3 1 0 0 0 0 0
1 2
4 0 1 0 0 0 0
4 5
5 0 0 1 0 0 0
0 2 3 4
NULL
1
2 1 4
3 NULL
1
NULL
1 2 1 2
NULL
4 3
10
root
10
7 12 7 12
42 4 1 30
1
15 20 5
8
15
NULL NULL
Drzewo binarne (BT – ang. binary tree) ...
11
poszukiwanie binarne
12
Poszukiwanie binarne
(implementacja dla tablicy jednowymiarowej)
13
Poszukiwanie binarne
(implementacja rekurencyjna dla tablicy jednowymiarowej)
14
Poszukiwanie binarne
(implementacja nierekurencyjna dla tablicy jednowymiarowej)
10
Drzewo poszukiwań binarnych zbudowane
jest w taki spsób aby dla każdego węzła w
3 23 wartości zapisane w węzłach znajdujących
się w jego lewym poddrzewie były mniejsze
od wartosci w węźle w, a w prawym nie
1 4 17 30 mniejsze od wartości w węźle w.
15 20 35
18
16
17
10 10
root
3 23
3 23
1 4 17 30
15 20 35
17
18
struct wezel { 15
int value;
NULL NULL
wezel *right;
wezel *left;
};
18
Umieszczanie binarne
(tworzenie drzewa binarnych poszukiwań)
// Umieszczanie binarne
// ------------------------------------------------------------
struct wezel {
int value;
wezel *right;
wezel *left;
};
int main(void)
{
int wstawiany;
wezel *root = NULL;
int i = 1;
cout << "w" << i++ << ": ";
cin >> wstawiany;
while (wstawiany != 0){
BST_insert(root,wstawiany);
cout << "w" << i++ << ": ";
cin >> wstawiany;
}
...
} 19
Umieszczanie binarne
(tworzenie drzewa binarnych poszukiwań)
// Umieszczanie binarne
// ------------------------------------------------------------
20
Poszukiwanie binarne
21
22
15 20 35
Odwiedzanie są wszystkie węzły
w kolejności:
18
1 3 4 10 15 17 18 20 23 30 35
23
1 4 17 30
15 20 35
Odwiedzanie są wszystkie węzły
w kolejności:
18
10 3 1 4 23 17 15 20 18 30 35
24
1 4 17 30
15 20 35
Odwiedzanie są wszystkie węzły
w kolejności:
18
1 4 3 15 18 20 17 35 30 23 10
25
Przeszukiwanie grafu
Przeszukiwanie grafu wgłąb - algorytm DFS (ang. Depth First Search)
6
6
3
3
1 2
1 2
4 5
4 5
6
stos
3 3 3 5
2 2 2 2 2 2 2 4
1 1 1 1 1 1 1 1 1 1 1
czas 26
Przeszukiwanie grafu
Przeszukiwanie grafu wgłąb - algorytm DFS (ang. Depth First Search)
1 2
4 5
6
stos
3 3 3 5
2 2 2 2 2 2 2 4
1 1 1 1 1 1 1 1 1 1 1
czas 27
Przeszukiwanie grafu
Przeszukiwanie grafu wgłąb - algorytm DFS (ang. Depth First Search)
1 2
4 5
6
stos
3 3 3 5
2 2 2 2 2 2 2 4
1 1 1 1 1 1 1 1 1 1 1
czas 28
int main(void)
{
int G[MAX_N][MAX_N]; // macierz sasiedztw wierzchołków
bool Visited[MAX_N]; // znaczniki odwiedzenia wierzchołków
int n;
int v;
Init(G,Visited);
ReadGraph(G,n);
DFS(G,Visited,n,v);
...
}
29
Przeszukiwanie grafu
Implementacja c.d.
Visited[i] = false;
}
}
30
Przeszukiwanie grafu
Implementacja c.d.
void ReadGraph (int G[][MAX_N], int& n)
{
int u,v;
cout << "Podaj liczbe wierzcholkow ";
cin >> n;
if (n>0) {
cout << ":"; cin >> u; // Podanie 0 dla u lub v konczy wpisywanie
if (u!=0) {
cout << ":"; cin >> v;
cout << endl;
}
while((u!=0) and (v!=0)){
G[u-1][v-1] = 1;
G[v-1][u-1] = 1;
cout << ":"; cin >> u;
if (u!=0) {
cout << ":";
cin >> v;
cout << endl;
}
}
} 31
}
Przeszukiwanie grafu
Implementacja c.d.
DFS(G,Visited,n,u);
32