IN110
IN110
22
& Programma
Programma
-
-
>
Pseudo
> >
binario
/eseguibile)
1
Codice sorgente in
linguaggio
in C macchina
FUNZIONI
nome
codominio
- LIBRERIE T ↑
X
8 :R
SCRIVERE IN C f(x)
=
Ext
Introduce
Le Librerie
- deve essere
-standard library sempre presente
T
DIRETTIVE
DEL MEMORIA MACCHINA
PRECOMPILATORE sbit
standard input/output
> MAINI 123...
Stiamodefinendo,a me
-
# ·
- ... 590591
DIRIZZO DI -
-
ALGORITMO PER SVOLGERE Istolio h)
MEMORIA IN CUl
.
E ALLOCATA LA
LA FUNZIONE MAIN & formato decimale VARIABILE
>
SEGNAPOSTO
OPPURE - printf (%D+%D=%D -
n”,A,B,C);
Esvalore variabile A CAPO
>Ok
· => O -
> ERRORE
LONG =
I (INT) /R -T
DOUBLE =Q (FLOAT) 11 -
/
UNSIGNED =
N 1% >
-
%
Char =
Ya,
b ....,
2] caratteri
alfanumerici
(D
X
DATI DUE INTERI E
Y SCRIVI IL MAX
(A)
int main (void) & =
ESEL
int X, Y;
printf(“inserisci due interi:”);
scanf(“%d %d, &X, &Y); -
B si
?
no
if (X>Y) S
printf(“il massimo è %d, X”)
3 -
-
= (A)
(B)
3 else E
-
return(0)
'I
DATI TRE NUMERI INTERI X,
YEZ SCRIVI IL MAX
#include <stdlib.h>
#include <stdio.h>
)[
scanf(“%d %d%d, &X, &Y, &Z);
if (X>Y) = (A)
Es = (A)
If (X>Z)
printf(“il massimo è %d, X”); !
else
35 V
)[
3 V SELSES
return(0) -
S
-
-PERATORI
TERRORE
I
DI CONFRONTO NUMERI CI
IF
(A(B(39 & B! =
0)
-
! 3)
IF(B =
0 && A/B >
di
negazione
I
& &
> MODULO
and è il resto
della divisione
Resto
or V
STRUTTURA ITERATIVA
P
.
v
While ( )[
i
...
=
-
3 While ( ..
):
1. I=0
2. Se I<N allora prosegui altrimenti vai a 8
3. ….
4. ….
5. ….
For (assegnazione : condizione
, incremento) ?
6. I==+1
7. Vai al passo 2 V
8. ….
P
>? >
= RADICE QUADRATA
I I 1
(float)
= +
Sart
devo <math ha
includere .
#include <stdlib.h>
#include <stdio.h> e mettere come ultima opzione di compilazione -
em
- dimensione
int A100 ·
le variabili sono allocate tutte di
seguito
↓
AFOT ....
Alat
definirlo così
meglio :
size off
printf("char :
din" ,
Sizeoff (char):
printf/ int Toin" Sizeoff (int):
:
printf("double :
din" ,
Sizeoff (double)):
restituisce l'indirizzo
del byte
↑
di memoria
o
1
malloc
memory allocation
(n
:
di byte) AGAFOT
scanf("% d" ,
& n) ; => INT Al100]
mesize = char
se
:.
una STRUTTURA è un nuovo tipo di dato composto da tante variabili scalari ,
o da strutture
Float
3>
MEDIA
int * X
,
A esami =
5 ;
A media 25 7 :
.
=
,
23 na
STRUCT MATRICE
Sizeof (tipo) - > no byte 5678 3533
3533-17
(no byte)
-
malloc -1 ind . memoria
12 locaz
>
-
6 >
free (indice mem
-
o ,
-riga
A[5][4]
>
int
-
colonna
>
int alloca
-
n * 2 i come si
, , ;
y
Scant ("Yod" & n) ,
int * * A
2 =
malloc (N * Sizeof (int)) ; A =
malloc (5 Sizeof(in+* ))
*
for (i = 0
;
i< n
;
i ++ 1 for (i =
0; <5
,
i ++ /
A[i] RAND)( =
* [i] =
malloc (sizeof (int) 4) ; *
strutture dati
3 far
voglio
definire senza ricorso
agli array
LISTE
S NODO
S >
-
17 24 NULL 15
A
INFO NEXT M
nodo
L, puntatore
struct elemento
Successivo
int info ;
) ,
l
struct nodo * A; penext
=
primo per separare
puntatore a l'indirizzo di memoria
leghista)
re
dal
primo p; campi
=
nodo
Stampalista (A) ; turn (prima);
return (0) ; 3
I
STAMPA LISTA GENERA
printf("dod" peinfol ,
struct nodo *
p primo =NULL ;
,
p
=
malloc(sizeof (struct nodo) ;
p-> info =
rand)( % 100 ;
penext= primo
re primo p;
=
I
Lista di TIPO CODA
structiontu ma structuado int
ultimo
vod accoda
struct nodo *
pi
p mallo
=
(sizeof (struct nodo) :
P >
-
info =
X;
int main (void ,
P-> next = NULL;
struct nodo primo ultimo;
Nuci2
* ,
if ( * Ultimo ! =
Primo =
NULL
,
* ultimo next =p;
ultimo Null ;
jelse(
=
accoda/a primo
, ultimo
, 10) :
* primo p ; =
3 accoda/a primo
, ultimo
, 20) :
Ultimo
* =
p ,
return
3
28 nov
I GRAFI
[0o ,
-
,
En 1
un GRAFO G =
(V E) ,
è una coppia di insiemi discreti e finiti
&
. insieme
degli spigoli
ECVXV
& [i 55) , ,
4 j
,
=
g ,
t
,
n -
1}
Wo
·
We
V
[Vo Va wil
S
vi =
Va Us
, , , ,
)
,
22 Va
G =
il è ORIENTATO
grafo (directed) (vi Uj) (25 wi)
Se =
, ,
(55 , wi)
,
↓ isomorfo a :
orientato
DAG
grafo
- =
acidico
Se (vi , j) E(G) =
Uj è ADIACENTE
IV (G)) =
n ->
numero vertici
IE(G)) =
m -
> numero
spigoli
spigde
in un
grefo orientato
-
J Vj è ADIACENTE a wi
↓
Vi
j
entrante
uscente
orientato
in un
grafo non
Ik In
è INCIDENTE so Un e Uk
GRADO DI V :
N(r) =
[w V(G) :
(u w) ,
(
E(G)) Il numero di
spigoli che sono incidenti a V
il è orientato
se
grafo non :
Nic] = N (r) 0
Quin 7
grado ENTRANTE E USCENTE
p
=
, ,
5 . 4) volte per un vertice ,
si dice che non
è SEMPLICE
lunghezza = n
spigoli
un cammino che inizia e termina nello stesso vertice si dice CICLO
ACICLICO è un
un
grafo grafo che non contiene adi
>
un
na
cido che
uno
spigolo
allora il cammino è SEMPLICE che va da Wal
è detto CAPPIO
Se 7 p :
w -u Vu,weV(6) =
G Si dice CONNESSO
che
un cammino
2 due a
p
due ,
collega
vertici
Se G non è ORIENTATO
tea
S > ·
7 .
FORTEMENTE
CONNESSO i
i
T
=
completo che ha
un
grafo
e un
grafo due
collegat
J (v , v) e E(G) Fu ver, i ~
= V
-
-
- -
·imm
ACICLICO
. >
-
ALBERO
hanno il minimo numero di
spigoli
>
-
CONNESSO
affinché sia connesso
n'vertici-1
ni
spigoli
>
-
=
-
-
to >
-
·
La
le
Va
Va UV V =
1
.
Vz
2
V= rVe 0
.
=
.
3
, .
5
,
7
un
grafo MULTIPARTITO è un
grafo la cui partizione dell'insieme
dei vertici è divisa in n sottoinsiemi
Es : G =
(V E), >
-
se tutti i
possibili spigoli sono connessi allora
. 2
Il
grafo è detto
VI
1
COMPLETO
i
Vz
K3
"
.
3
>
-
e indicato con
,
2
V3 4
.
5
K3 3 è
,
uno del più piccoli non PLANARE
G =
(V., E)
>
·
·
ECE G =
G[v]
ha i vertici di G' ma ha tutti i possibili spigoli di G
INDotto
-
> albero ricoprente
T è SPANNING TREE di
-
G Se :
T è di G ;
sottogruppo
·
e albero
-
·
T :
-
·
v (T) =
V (G) : m
spinning
indica vertice
a un cammino per raggiungere ogni
PROBLEMI DI OTTIMIZZAZIONEL
↓ minimizza il costo
OTTIMIZZAZIONE COMBINATORIA
rappresentare ?
come posso un
grafo
·
con una MATRICE DIADIACENZA :
particolarmente inefficiente
dato G =
(V E)
,
(vi)E
(0
se
M quadrata di ordine n =
VIG) to .
Maj =
1 2 .
01234
1 se (Vi Vj)
,
e E
·
0100 1
1 10101
O
M =
201011
~>
vertici adiacenti a 3 =
(2 4)
,
300101
4 11110
43
il è orientato la matrice è
grafo SIMMETRICA
>
se non
-
il
grado entrante è la somma della colonna
>
-
il
grado uscente è la somma della riga
>
-
8
-1 - 4
1 >
2 > 4 >
O
2 >
4 > 1 >
3
3
>
2 > 4
4
3
O <
2 >
1 -3
>
operazioni elementari :
-
#include stollib ha .
# include -staio ha .
-
= ** V
3 j
Seturn (n)
n =
:
vedi 23 nov
stampeGrafo (V K) ; ,
return (0) ; I
3
void stampaGrafo (struct nodo * VIit ,
in + n) ;
int i
j
for (i =
0; i < m
; i + + )[
printf/"vertici adiacenti a % d :
"
,
il i
Stampa Lista (VEi]) ;
3 vedi 23 nov
return ;
I
lette le liste di adiacenza di orientato G stampare le liste di G
Es in input un
grafo
:
,
# include stollib ha .
struct nodo ?
int info ;
int adiacente /struct nodo VI] intA int B)
struct nodo next;
, ,
*
3 j
struct nodo *
p ; intri
- primo elemento
>
(void) [
l'ORDINE delle condizioni
int main p V[A]
lista di adiacenza
è importante
-
=
A
int n ,
A B; ,
While (P != NULL &9 p
-
> infol =
B)
struct nodo * VELOO] P-p-onext ;
n =
leggiGrafo (V) : if (p = =
NUL)
stampeGrafo (V K) ; ,
V 0 =
;
Y
, ,
StempaGrafo(V n); ,
return (0) ;
I
B)
aggiung (struct
void nodo +
VI] intA in +
, ,
struct nodo *
p:
p malloc
=
(size of (structnodo) ;
p-> info =
Bi
p >
-
next =
VIA] ;
VIA] =
P;
return ;
3
5
GRAFO
matrice di adiacenza
liste di adiacenza
~
>
- >
-
- -
~
N(i) vitV(G)
vertich
puntatori
la prima operazione L :
VISITA DI UN GRAFO
a fa
↓
esplorare il
grafo in maniera efficiente
ci sono due
strategie :
in AMPIEZZA :
visita il
grafo allontanandosi il meno
possibile dalla
>
-
algoritmo 5 6
C =
COLORE
= 4 1
i padre
loscelgo
- =
2 d distanza
(rospigdiv S) >
-
=
3
-
!
1 per ogni weV(G) ripeti nella coda
li
ci
coloro
vanno
di
solo
nero
i vertici
grigi
ma poi
2 .
c(v) = bianco ,
i
(w) =
Nu ,
d = 0
:
fine-ciclo
&(n)
.
3
.
5 fintanto che + ripeti
j
>
- primo elemento della coda a
.
6 Sian =
estral(a)
7
.
per s adiacente a ripeti mere
ogni
u
13
. fine-ciclo
.
8 Se c(u) =
bianco allora :
14 .
c(u) = nero ;
9
. c(u) =
grigio ,
accoda (Q 2) ,
15
. Fine-ciclo
E
π(w) 4
rivertici
10 .
=
11 . d() =
d(u) 1) + =G(n) +
12
. Fine-condizione
# include stollib ha .
# include stolio ha .
struct nodd
int info :
3 j
int c [100] .
Pit100] DE100] , ,
u
,
v
,
n
,
i
,
Grafo (VI :
n
leggi
=
for (i = 0 ; i < n
;
i + +
14
c[i] =
0 : pi[i] =
-1 : D[i] = -
1:
I
Scanf (" % d" & S) ;
D(s] =
0 ; c[5] = 1 ; accoda /a primo
, aultimo ,
s) ;
while /primo != NU) ?
4 = estrai (a primo
, &ultimo) ,
p
=
V[r] ;
while (p ! Null) [ =
If (c[p
info) 0? -
> ==
d[p-infoj 1 =
Pi[peinfoj =
U ; D[peinfo] D[u] =
+ 1;
3
P p = -
> next ;
3
c[u] =
2 :
3
Stampa Vettore/Pi n) ; ,
7 dic
di
algoritmo DFS depth first search
=
DFS(G)
per
ogni wev(G) ripeti
.
1
:
2 C(u) = bianco ,
in (v) =
NULL
.
3 fine-ciclo ;
5 .
se ((2) =
bianco
, allora visita (G ,
2) ;
6
. fine-ciclo
7
. fine
visita (G v) ,
.
1 C(u) =
grigio ,
i = i + 1
sorgentez perché ha
2 per ogni UEN(2) ripeti
:
entrante O
grado
.
↓
.
3 se C(u) =
bianco allora :
pozzo + perché ha
- uscente O
1 grado
4 .
(4) =
0 %
3
.
5 visita (G ,
U
,
i
, p) ;
6 .
fine-condizione ; 0 . 2 4
7 .
fine-ciclo ;
8 C(u) =
nero ; f = F+ 1 ;
.
6 5
.
9 fine .
I 01152 P
& 12345 6
COMPLESSITÀ COMPUTAZIONALE :
10 13)
G(n m)
.
⑧
+
(1 10)
·
~ "If
↓
,
W
1
spigoli vertici SPANNING (11 12) ,
% TREE
se sono
tant (4 , 9) (2 3) ,
2 .
↓
1 2
SPANNING
i FOREST (5 8)
·
7
,
.
5
C
↑
es
L
0
.
5)
%3
16
7
,
72
E
2
↑
-
·
O -
3
O
21
4
.
1 .
6 ! 13 sa noi is
5
-
12 olic
algoritmo in
grado di calcolare il cammino di costo
non il
minimo
più breve
da
sorgente singola
1
3
DIJKSTRA
-
I
5
15 5 10
.......
0 30 10
. 4
5
-
2 w(v , v) 20
15
65
costosa
lunga ma meno
(0 v) ,
- E(G)
w(p) + w(2 u) ,
<
W(r v) ,
DIJKSTRA (G ,
W , S) D(w) =
[W(vi Uj),
per
ogni wev(G) ripeti
1 :
.
2 on) D() in () NULL ;
=
20
,
=
.
3
Fine Cicada in cul metto tutti verta del
graf
4. Q V(G)=
/FwEV(f) :
accoda in Q) ;
.
5 8HD(S) =
0 ;
inizio ve ro
6
. fintanto che Q O ripeti
an
7
. U =
estrai da Q il vertice con D minima ;
.
8 per vertice u adiacente a u ripeti
Im ogni
0
9
. se D(w) >
D(u) + w(x + 2) :
10 .
T allora D(t) D(u) =
+ w(n + v) ;
11 .
# (2) 2 =
,
12 .
fine-condizione :
13 .
fine-ciclo ; >
-
G(n + n + 1 + n + m)
= d(nz +m)
14. fine-ciclo ;
15 Stop
a) 7 O(n) >
Ollogan )
-
al 10 . 0(1) -
>
allog n) ,
Cammino (i u) ,
u M(u)
- Cammino (it (4)) :
=
ricorsivo
; ,
SCRIVI U; fine-condizione :
fine fine ;
Dato
grafo G
un
calcolare il
grado entrante di veV(G)
trovare vertici pozzo e
sorgente
·
1 > 2 V
>
1 M O >
-
1
O
v 1 >
-
2
3
M 1
3
>
-
5 - 3
~
S
5 > 4
4 >
-
3
5 >
-
4 - 0 - 1- 2
intG =
0, i;
for (i = 0; i <n
; i ++ )4
P V[i] ;
=
while /P != Null
2
If (p-s info ==
0){
G = G+ 1;
P =
NULL ;
jelse(
P P = -
> next ;
3
3
I
return(G) :
14 dic
BASI DI DATI
↓
(database) INDICE del dat
-
ordinati per ...
eseguo frequentemente
-
alcune operazioni
codice fiscale matricola
nome
cognome ecc
...
RICERCA -
>
O(m)
·
ORDINARE--O(nlogen)
.....
-
·
Strategia DICOTOMICA
↓
suddividere l'insieme
necessariamente in cul cerco il dato
non
completo
>
-
UNICA REGOLA
S(v) = w =
D()
es : 50 20, 40 60 90
, , , ,
10 48 45 85 , 70, 65
, , , .
50
80 30 , ,
12 5 35 , ,
20 60
10 40 go
51230 85
48
operazioni
70
3545
inserimento
O()
·
65 80
loghan
·
ordinamento (utilizzando DFS) 0(n m)
↓
+
è un albero quindi i
=> ((n + n -
1) =
0(n)
numero di
spigoli è n-1
int info ;
Y i
·
INSERIMENTO
imsert(T V) ,
padre
X =
root (T) , Y NULL
=
radice
Se info(x) v allora :
(h
X= Sx(x) :
·
altrimenti
logenzhen
:
X =
dx(x) ;
fine-condizione ;
fine-ciclo
P(v) =
Y
se Y =
NULL allora :
root(T) =
V,
altrimenti :
Sx(y) =
vi
S(1)
altrimenti :
dx(y) =
Vi
fine-condizione
fine-condizione
fine
·
RICERCA
~ rediceol
Search (X , v)
L,vertice che
cerco
Se info(x) v allora :
x =
Sx(x) ;
altrimenti
(n)
:
&
X =
d(x) ;
fine-condizione
fine-ciclo
restituisci X,
fine
.
MINIMO ·
MASSIMO
radice
min(x) max(x)
fintanto che SX(x) NULL :
fintanto che dx(x) NULL :
X =
SX(x) ; X =
dx(x) ;
fine-ciclo
; & (n) fine-ciclo
;
restituisciX ; restituisciX ;
fine fine
SUCCESSORE
·
PREDECESSORE
y mim (0x(X)) ;
= -
>
figlio de più piccolo
altrimenti :
& (n)
y
=
p(x) ;
X=
Y;
y =
p(x) ;
fine-ciclo ;
fine-condizione ;
restituisci y :
fine
SORT (sX(x)) :
SCrIVI X ,
SORT(0x(x) ;
fine-condizione ;
fine
19 dic
COMPLESSITA COMPLESSITA
DI > DI
ALGORITMI PROBLEMI
ci sono problemi più difficili ?
>
-
> la
e
compcompe cui
risposta è si/ no
.
5(f(n)) =
(g(n) :
7 noso , o >
-
ricerca
t . c .
<(f(n) =
g(n)fn
> no
3 una soluzione
>
-
enumerazione
problemeil >
- ottimizzazione
criterio
f(n) = k
X
· subset
sum
· sort
soluzione
migliore secondo un
&
!
non
f(n)
sappiamo I
= m se esiste
. conn
.
->
2 S
algoritmo
problemi risolvibili
un
polinomiale
=
·
NP
in
tempo polinomiale
problemi l hanno card
questi insiemi o
CLIQUE SO
i3 MASSIMALE
>
-
di
su G
dimensione K ?
una clique
CLIQUE
· didim4
NON ESISTE
- - UN ALGORITMO
Subsetsum- sottansiemi >
POLINOMIALE
DER RISOLVERLO
-
> CLIQUE
· -
di dim 3
·
ALGORITMO RISOLUTORE
POLIN
NIP
problemi verificabili
in tempo polinomiale
es Sort
problema
=
grande
.
=>
siamo sicuri che P =
NP ? >
-
più
dell'informatica teorica
↓
Ps se B è in tempo polinomiale
>
-
NON È Detto Che E
PIU SEMPLICE
NP-COMPLET (NP-C)
# E NP-C SE
1 .
A ENP
.
2 V BENP BEpA
or -
P
>
-
TEOREMA DI COOK
SAT ENP-C
satisfability
(IAEB)GAECCENOND) . . . . . . . . .
)
COPIA 11 38
:
COPIA -
> 10 : 21
n =
random Graph (V) ;
Stampa Grafo (V n) ; ,
return (0) ;
3
non orientato
int random Graph /struct nodo
VIS/2 ↑
Float X
:
int n; for (i =
0 ; in -
1: i + +
)
intn i , for(j =
i 1 ; j( j + +)
j ;
+
, ,
Srand (NULL))
(lunsigned timeprobabilità ; rand() % 100 =100 +
X)
>
Scanf(" %od" ,
& n) ; addedge (V J i) ; , ,
for (i =
0 ; icn : i + +
V[i] =
NULL ;
for (i = 0 ; i < n ; i + + )
for(j =
0 ; j( ; j + +)
>
-
è ORIENTATO
aggiunge un If (i ! j =
&d rand (1 % 100 7100 +
X)
vertice alla lista
di adiacenza
E uno -addEdge (V
spigolo tradue)
vertici del grafo
,
i
j)
,
;
return (n)
I 10 36 :
Vod
addedge /struct nodo VI] ,
inti ,
intjl[
struct nodo p;
p
=
malloc (sizeof (structnodd) ;
Pt Info J ; è prientato
=
>
-
p
- > mext =
V[i]
vedi 10 45 !!
:
V[i] p ; =
return ;
3
lista di vertic stampare Gel verificare e
Datoungrafo e
una se
,
e
·
#
#include time h >
.
.
·
-
4
&
struct
nodd
intinfo ;
&
-
-
· -
-
I i
intn ; ~ oppure-n =
leggiGrafo)
n =
randomGraph (V) ;
=
while (c
leggilista))
!
Nulla&
=
;
If /-> next ==
NULL)
printf ("Si"),
else
Printf ("no") ;
return (0)
3
:
P =
V[i] ;
While (p ! =
NULL da p - info =
j)
P p
= - next ;
#f
(p !=
Nux)
r = 1
;
return (r) :
SorT
·
Selection sort (A , n) ·
insertion sort (A n) ,
se Ai > Au allora :
fintanto che K=0 e AkAnt1 ripeti :
scambia Ai e Ak Scambia Ak e Ak + 1 ;
fine-cond k =
k -
1;
fine-ciclo fine-ciclo
fine-ciclo fine-ciclo
fine fine
·
bubble sort (A n) ,
·
quick sort (A ,
pre fine
flag
=
0; pivot= fina Pivot(A p r) ; , ,
k =
n -
, ,
per 1 =
o -
> K ripeti :
quicksort (A p q-1); , .
Se Ai > Ai + 1 allora :
quicksort (A , p , g) ;
fleg =
1, fine
fine-cond
fine-ciclo
k =
k -
1; partiziona
I
(A pr , , pivot)
finanto che 1 fintanto che per ripeti
flag
=
per i =
p+ 1 - r fintanto che Ap-pivot :
se Ai-Ap allora :
P p+1
=
restituisci Ai , fine-ciclo
altrimenti : fine-ciclo
restituisci Ap; se par allora :
merge
sort (A, p , r) .
neap sort (A , n)
se pir allora :
Ho =
P
q =
Pr per i =
0 -
> n-1 ripeti :
mergesort (A p 9) , , ,
inserisci (H Ai) ; ,
sort (A r
q + 1); fine-ciclo
merge , ,
merge (A p p r) : , , ,
per 1 =
1-1-30 ripeti
fine-cono A .
=
estral (H)
fine fine-cido
fine
merge (A p a)
r
, , ,
k 0 i p 1
j q
= = =
+
, ,
Bk =
Ai ,
i = i + 1
,
k =
k + 1; L Ho =
;
altrimenti :
Ho =
Ho-1;
Bx =
Aj ,
j j+
= 1 ,
k =
k + 1; H1 =
H2 ;
fine-cond i =
1;
fintanto che
jer ripeti i 2i ,
=
Bk =
Aj j j ,
= + 1 ,
k = k + 1; altrimenti :
fine i =
2i + 1;
inserisci (H x) ,
fine-condizione
L Ho 1
=
+
,
Ho 2 =
,
Ha =
X; fine-ciclo
fintanto che -1 e Ha Hua ripeti :
se i =
22 e Hi Hei allora :
2 =
4/2 w =
2/2
fine-cido fine-condizione
fine restituisci MAX
fine
VISITA DI UN GRAFO
in amplezza
·
>
-
ci cammino v
BFS(G S) -
>
breath fast search
Y
,
c) =
bianco ;
↑ (2) =
NULL ; On numerose
(v) d) = 0
;
fine-ciclo
d (s) 0 c(s) grigio, accoda (a 5)
= =
, ,
I
U =
estralla)
per ogni
s adiacente a u ripeti :
se c(e)-bianco allora :
N(w)
C(u) =
=
grigio
4
, accoda (a w)
,
5(m numero
a (w) =
p()+ 1 spiga ,
fine-condizione
fine-ciclo
c(u) =
nero;
fine-ciclo
=>
ha compl comp .
8 =
n +m
in profondità
allontana il più possibile dalla
sorgente
>
si
-
>
-
DFS(G) -
>
depth first search
se v(G) ripeti
I
per ogni
c (v) bianco
=
,
in (w) =
NULL ,
(n)
fine-ciclo
per we V (G) ripeti
ogni
:
se
fine-ciclo
e(a) =
bianco ,
allora visita (G ,
2) ) 0(n)
fine
visite (G ,
v)
3
C(r) grigio=
ve N(2) ripeti
per ogni
:
se clu) =
bianco allora :
# (4) = 2; G (m)
visite (G u) ;
,
fine-condizione
fine-ciclo
c(u) =
nero ;
fine
=>
ha compl comp .
8 =
n +m
DIJKSTRA
>
-
> (u v)cE(G)
,
DIJKSTRA(G W , ,
S] w(p) w(2 v) W(0 v)
+
, ,
w(2 v)
D(0) in (w) NULL;
=
00
,
=
,
fine-ciclo y
y w(0 V),
V
& =
V(G) - EFeeV(6) accoda sina);
D(S) =
0
;
fintanto che + 0
ripeti :
= estrai(Q a) ,
con el minima
s adiacente
vertice ripeti
per ogni a u
() (0) =
D (0) +
w(u 2) +
;
(2) = U
fine-condizione
fine-cido
fine-ciclo
fine