Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TRACCIA 24-01-2019
- Siano dati due grafi G1 e G2 e due vertici s,v € V. Verificare con i due grafi passati in ingresso (in tempo lineare) se:
- -> nessun percorso infinito in G1 che parte da s raggiunge v
- -> tutti i percorsi infiniti in G2 che partono da s raggiungono v
- -----------------------------------
- MIA SOLUZIONE:
- Algo(G1,G2,s,v)
- INIT(G1,G2)
- RET1=DFS_VISIT(G1,s,v,c1)
- RET2=DFS_VISIT(G2,s,v,c2)
- /*Dalle chiamate di DFS_VISIT verifico se si verificano prettamente queste due condizioni che sarebbero i due punti
- della traccia.. qualora la cosa si verificasse allora l'algoritmo ritorna true e la condizione della traccia è soddisfatta,
- altrimenti false*/
- if(RET1=TRUE && RET2=FALSE)then
- return TRUE
- else
- return FALSE
- ----------------------------------
- INIT(G1,G2)
- for each g1 in G1 do
- c1[g1] = bianco
- for each g2 in G2 do
- c2[g2] = bianco
- ----------------------------------
- /*La mia dfs_visit in pratica visita il grafo e setta i vari colori con la cosa che
- controlla in più se è un percorso infinito. In tal caso ritorna true perché
- richiesto dalla traccia percorsi infiniti.
- Dopodiché coloro di nero il vertice visitato
- Alla fine controllerò soltanto v se è diventato nero o meno,
- se è diventato nero vuol dire che ci sono passato e quindi c'è stato un percorso
- che ha raggiunto v e quindi il punto 2 della traccia. Altrimenti il punto 1 della traccia.
- DFS_VISIT(G,s,v,c)
- c[s]=grigio
- ret=true
- for each u € ADJ[s] do
- if ( c[u]=bianco ) then
- DFS_VISIT(G,u,v,c)
- else if ( c[u]=grigio ) then //verifico l'esistenza dei percorsi infiniti
- ret = true
- c[s] = nero
- if ( c[v] = nero ) then
- ret = false
- else
- ret = true
- -------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement