2014-05-06 23 views
5

Ho una matrice di adiacenza per il grafico. Devo rendere visibile questo grafico senza bordi intersecanti. Il vertice nel grafico può essere organizzato in modo casuale. Conosco una soluzione: enumerazione di tutti i bordi per le intersezioni. Se i bordi si intersecano, quindi riorganizzare il vertice, ma è troppo costoso per un numero elevato di vertici (più di 20). Qualche altra idea su come controllare i bordi intersecanti?Come disegnare il grafico con i bordi disgiunti?

+8

Quello che stai cercando è un algoritmo di disegno grafico planare, come implementato da [boost] (http://www.boost.org/doc/libs/1_36_0/libs/graph/doc/planar_graphs.html). Ovviamente questo può funzionare solo se il grafico è effettivamente planare, che non hai specificato. –

+1

[Here] (http://stackoverflow.com/questions/2751826/which-c-graph-library-should-i-use) 'è un elenco di librerie che eseguono layout grafici, che include anche boost. Se si desidera implementare il proprio, [qui] (http://www.csi.ucd.ie/staff/aquigley/home/downloads/aq-gd2000.pdf) è un algoritmo che esegue i grafici 2D. –

risposta

1

È davvero facile visualizzare qualsiasi grafico in un piano 3D con spigoli disgiunti.

1) Posizionare tutti i vertici in qualsiasi punto del piano 3D in modo tale che non ci siano tre vertici allineati e non ci siano quattro vertici nello stesso piano.

2) Attraversare la matrice di adiacenza e tracciare una linea/curva per collegare i vertici.

In un piano 2D non è garantito l'esistenza di una soluzione. Ad esempio, si consideri lo scenario peggiore secondo cui ci sono circa 10 vertici e ogni vertice è connesso l'uno all'altro.

Problemi correlati