Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [Java] Problema grafo

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2015
    residenza
    Padova
    Messaggi
    6

    [Java] Problema grafo

    Ciao ragazzi, c'è questo esercizio da fare:
    http://i.imgur.com/xQi5Rbx.jpg

    Qui ho la soluzione, tuttavia non capisco perché alla fine lascia scritto
    return (k=2)
    Qualcuno lo sa? Se sì può spiegarmelo? Grazie mille!

    http://i.imgur.com/OcnvTM5.jpg

  2. #2
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao,
    immagina di avere un grafo con 5 vertici rappresentato da una lista di coppie (vertice, id).
    Il primo ciclo inizializza id a 0 :
    [(1,0),(2,0),(3,0)(4,0),(5,0)]
    Supponiamo che il grafo non sia fortemente connesso ma i vertici 1,2 e 3 siano connessi così come 4 e 5
    Simulando l'algoritmo avremo che
    k == 1
    Si entra nel ciclo for e alla prima iterazione si ha garanzia (per come abbiamo inizializzato gli id) di entrare nel if.
    Dentro l'if si esegue una visita in profondita impostando a k, ovvero a 1, tutti gli id dei nodi connessi al vertice 1 (1, 2 e 3):
    [(1,1),(2,1),(3,1)(4,0),(5,0)]
    Al termine della DFS si incrementa k a 2
    Si prosegue con il for; per i che vale 2 e 3 non si entra nell if, quindi non si fa niente.
    Quando i vale 4, id vale di nuovo 0
    Si entra nel if e si esegue di nuovo la DFS impostando id a 2 dei vertici connessi a 4 (4 e 5):
    [(1,1),(2,1),(3,1)(4,2),(5,2)]
    Al termine della DFS si incremente k a 3
    prosegue il for ma non essendoci più vertici con id == 0 il ciclo termina con k == 3
    Si restituisce k == 2 ovvero false, il grafo non è fortemente connesso.

    Ipotizzando invece che il grafo sia fortemente connesso:
    k==1
    alla prima iterazione si entra nell'if
    DFS imposta a k, ovvero a 1, gli id di tutti i vertici connessi al vertice 1, (tutti quanti):
    [(1,1),(2,1),(3,1)(4,1),(5,1)]
    Al termine della DFS k viene incrementato a 2
    Prosegue il for ma questa volta nessun altro id vale 0 e quindi il for termina senza fare più niente
    Si restituisce k == 2 ovvero true, il grafo è fortemente connesso

    In altre parole k-1 indica quante componenti connesse hai trovato nel grafo; se ne hai trovata solo 1 (grafo fortemente connesso) allora k vale 2.
    Ultima modifica di Nikopol; 22-01-2016 a 22:13
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2015
    residenza
    Padova
    Messaggi
    6
    Quote Originariamente inviata da Nikopol Visualizza il messaggio
    Ciao,
    immagina di avere un grafo con 5 vertici rappresentato da una lista di coppie (vertice, id).
    Il primo ciclo inizializza id a 0 :
    [(1,0),(2,0),(3,0)(4,0),(5,0)]
    Supponiamo che il grafo non sia fortemente connesso ma i vertici 1,2 e 3 siano connessi così come 4 e 5
    Simulando l'algoritmo avremo che
    k == 1
    Si entra nel ciclo for e alla prima iterazione si ha garanzia (per come abbiamo inizializzato gli id) di entrare nel if.
    Dentro l'if si esegue una visita in profondita impostando a k, ovvero a 1, tutti gli id dei nodi connessi al vertice 1 (1, 2 e 3):
    [(1,1),(2,1),(3,1)(4,0),(5,0)]
    Al termine della DFS si incrementa k a 2
    Si prosegue con il for; per i che vale 2 e 3 non si entra nell if, quindi non si fa niente.
    Quando i vale 4, id vale di nuovo 0
    Si entra nel if e si esegue di nuovo la DFS impostando id a 2 dei vertici connessi a 4 (4 e 5):
    [(1,1),(2,1),(3,1)(4,2),(5,2)]
    Al termine della DFS si incremente k a 3
    prosegue il for ma non essendoci più vertici con id == 0 il ciclo termina con k == 3
    Si restituisce k == 2 ovvero false, il grafo non è fortemente connesso.

    Ipotizzando invece che il grafo sia fortemente connesso:
    k==1
    alla prima iterazione si entra nell'if
    DFS imposta a k, ovvero a 1, gli id di tutti i vertici connessi al vertice 1, (tutti quanti):
    [(1,1),(2,1),(3,1)(4,1),(5,1)]
    Al termine della DFS k viene incrementato a 2
    Prosegue il for ma questa volta nessun altro id vale 0 e quindi il for termina senza fare più niente
    Si restituisce k == 2 ovvero true, il grafo è fortemente connesso

    In altre parole k-1 indica quante componenti connesse hai trovato nel grafo; se ne hai trovata solo 1 (grafo fortemente connesso) allora k vale 2.
    Grazie mille per avermi dedicato il tuo tempo e per la risposta! Ho capito
    Gentilissimo!

  4. #4
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    figurati
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.