È un cactus?


23

Nella teoria dei grafi, un Cactus è un grafico collegato in modo tale che ogni due semplici cicli distinti nel grafico condividano al massimo un vertice.

Ecco un Cactus con 3 semplici cicli delineati con linee tratteggiate.

Cactus Graph

Il seguente grafico è simile a quello nella foto sopra ma non è un Cactus perché i due vertici etichettati in rosso sono condivisi da due semplici cicli.

Grafico Non Cactus

Le cose possono diventare un po 'più complicate, ad esempio il seguente grafico:

Inoltre non è un grafico Cactus

Potrebbe sembrare un Cactus ma non lo è. Questo può essere mostrato evidenziando il seguente ciclo:

Ciclo evidenziato

Questo ciclo condivide più di un punto con molti dei cicli più evidenti nel grafico.

definizioni

  • Un grafico collegato è un grafico tale che esiste almeno un percorso tra due vertici.

  • Un ciclo semplice è un percorso su un grafico che inizia e termina con lo stesso vertice e non visita alcun vertice più di una volta.

  • Un grafico semplice è un grafico non orientato, non ponderato in modo tale che nessun vertice sia collegato tra loro da più di un bordo e nessun vertice sia collegato a se stesso. Un semplice grafico è il tipo più semplice di grafico ed è ciò che la maggior parte delle persone intende quando dice grafico.

Compito

Prendi un semplice grafico come input e decidi se si tratta di un grafico Cactus. Dovresti generare due valori distinti uno per True e uno per False. Puoi ricevere input in qualsiasi formato che ritieni opportuno.

Questo è quindi dovresti mirare a ridurre al minimo il numero di byte delle tue risposte.

Casi test

Casi di prova come matrici di adiacenza


Puoi dare un'occhiata alla mia soluzione, fammi sapere se è valida? Sono caduto come se il modello ovvio fosse troppo ovvio e mi mancasse qualcosa.
Shaggy,

@Shaggy Non riesco a leggere JavaScript, se lo spieghi potrei essere in grado di farlo.
Wheat Wizard

Posso provare. Sto verificando 2 cose: 1) econtiene esattamente un elemento AND vcontiene esattamente 2 AND è vuguale al primo elemento di e? 2) OPPURE È vuguale all'insieme dei primi elementi di ciascun elemento in e? Il secondo caso test viene superato il primo controllo ( v=[1,2]=e[0]=[1,2]) e gli altri casi di test che dovrebbero essere partita vera la seconda, ad esempio, caso # 4: v=[1,2,3,4,5,6]=[e[0][0],e[1][0],e[2][0],e[4][0]]=[1,2,3,4,5,6].
Shaggy,

@Shaggy Questo non funziona per esempio il primo diagramma fornito fallisce. console.log(f([1,2,3,4,5,6,7,8,9,10,11,12,13])([[1,2],[1,3],[3,4],[2,4],[3,5],[5,6],[6,7],[7,8],[8,5],[7,9],[9,10],[10,11],[11,7],[8,12],[8,13]]))
Wheat Wizard

Dovrebbe tornare trueo false?
Shaggy,

Risposte:


9

Mathematica, 62 byte

Sort@#==#⋃#&[Join@@FindCycle[#,∞,All]]&&ConnectedGraphQ@#&

Controlli: (find all cycles, there are no duplicate edges)e(The graph is a connected graph)


1
gdovrebbe essere #vero?
ngenisi,

6
Quindi mi stai dicendo che non c'è isCactusbuiltin? Sono deluso.
Aaron,

Qualcuno dovrebbe scriverne uno.
Draco18

Dovresti mettere Mathematica semplificata come risposta separata.
mbomb007,

3
@Aaron Sarebbe CactusQse esistesse, credo.
NieDzejkob,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.