|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 9
|
Percorsi semplici in un grafo
Ciao ragazzi, spero qualcuno possa darmi una mano con questo esercizio:
Dato un grafo orientato G rappresentato con liste di adiacenza, si scriva in pseudo-codice, un algoritmo che, dati in ingresso G e tre vertici s,v e u , stampi tutti i percorsi semplici che portano da s a v passando per il vertice u Penso si risolva con una BFS o un DFS ma non so come. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Cosa si intende per "percorsi semplici"?
Comunque, l'osservazione banale è che il problema è riducibile al calcolare tutti i "percorsi semplici" tra due vertici nel grafo. Quindi, avendo questo algoritmo, lo applichi due volte: la prima volta per calcolare tutti i "percorsi semplici" tra s e u, la seconda volta per calcolare tutti i "percorsi semplici" tra u e v. A questo punto, la soluzione è data dalla combinazione dei percorsi s -> u con quelli u -> v.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 06-07-2012 alle 14:07. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Un percorso semplice è una sequenza di nodi/archi in cui non compaiono cicli. Io farei una DFS, marcando (o "colorando") i nodi visitati. Se torno sui miei passi (su un nodo già marcato) sto introducendo un ciclo, per cui posso scartare quel percorso. Se giungo al nodo di destinazione, il percorso che ho delineato fino a quel punto è buono, e lo aggiungerò ad un insieme di percorsi validi.
Il resto lo ho già detto banryu79.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 9
|
Prima di tutto grazie per le risposte!
Faccio un esempio in modo che sia tutto più chiaro, mettiamo che il grafo in questione sia questo (scrivo le liste di adiacenza di ogni vertice): adj[s] = A,B adj[A] = U adj[b] = U adj[u] = V Allora i percorsi semplici che rispondo al quesito della traccia sono S->A->U->V S->B->U->V Anche io avevo pensato ad una DFS, ma nel momento in cui trovo il primo percorso , U risulterà già colorato, quindi non lo andrò ad esaminare e il percorso S->B->U->V non verrà stampato...sbaglio qualcosa nel ragionamento? |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
- calcola i percorsi semplici da S a U ([SAU] e [SBU]) - calcola i percorsi semplici da U a V ([UV]) - componi i ogni percoso della prima soluzione con ogni percorso della seconda ([SAU+UV]=[SAUV] e [SBU+UV]=[SBUV]) In pratica devi solo scrive un algoritmo che trovi tutti i percorsi semplici tra due vertici di un grafo e poi usare la logica qui sopra.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jul 2012
Messaggi: 9
|
Ok, ho capito il ragionamento. Ora provo a implementare il tutto in pseudocodice!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:53.




















