|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
[c] Grafi,matrici di adiacenza e percorsi
Salve a tutti, ho un piccolo problema.
Ho una matrice di adiacenza creata da un grafo, nel formato: Codice:
0 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 e vorrei verificare se 2 nodi sono connessi, anche se non direttamente, esempio, il nodo 1 e' connesso al 2, il nodo 2 e' connesso al 3, di conseguenza indirettamente il nodo 1 e' connesso al nodo 3. Come fare a verificare questo? Grazie mille. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
assolutamente non testato:
Codice:
const int MatrixSize = 5; bool Matrix[MatrixSize][MatrixSize]; bool Connected(int iSource, int iDestination) { if (Matrix[iSource][iDestination]) { return true; } for (int i = 0; i < MatrixSize; i++) { if (Matrix[iSource][i]) { if (Connected(i, iDestination)) { return true; } } } return false; } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Puoi utilizzare la DFS-Visit a partire da uno dei due nodi ed esprimi il codice in funzione del secondo nodo immesso in input. Così facendo sai se sono connessi fra di loro e ne conosci anche il cammino minimo necessario per raggiungerlo.
http://en.wikipedia.org/wiki/Depth-first_search Qui invece un po' di materiale in italiano : http://www.cs.unicam.it/merelli/algo...tmiSuGrafi.pdf Ultima modifica di :.Blizzard.: : 10-01-2010 alle 23:45. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
|
Ti propongo un'idea alternativa, non so se sia corretta nè eventualmente migliore ma mi stuzzicava.
Potresti considerare la matrice come generata da una relazione binaria e farne la chiusura transitiva. A questo punto per controllare se tra due nodi (i,j) del grafo originario esisteva un qualche percorso dovresti solo controllare che ci sia un uno nella posizione (i,j) della matrice transitiva. ciao! british |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Alla fine ho risolto usando: http://en.wikipedia.org/wiki/Disjoin...data_structure
che mi ha semplificato la vita per quello che dovevo fare io, grazie a tutti dei consigli.. ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:24.