Domanda

Si consideri un gioco di carte lungo le linee di Tower Solitaire, Tripeaks, o Fairway Solitaire: il tavolo è costituito da un numero di carte che sono immediatamente disponibili, ognuno dei quali potrebbe essere coprono altre carte sotto di essa (che li hanno bloccati vengano riprodotti) . Hai una carta "fondazione", ed è possibile rimuovere una carta dal tavolo se è esattamente un rango sopra o sotto la carta di fondazione, a quel punto diventa la tua nuova carta di fondazione. Si dispone di un numero limitato di carte di sostituzione a cui attingere quando non si può giocare una carta dal tavolo, quindi in genere si desidera riprodurre la sequenza più lunga di carte possibile.

In primo luogo, come è possibile rappresentare la scheda per facilitare la ricerca di una soluzione? In secondo luogo, l'algoritmo usereste per trovare la sequenza più lunga giocabile?

Esempio:

  -4a- -5-
-3-  -2- -4b-

Schede sulle carte del blocco di fondo sulla parte superiore di essere rimosso: Non è possibile rimuovere 4a fino a quando entrambi 3 e 2 sono andati. Assumendo che il carta di partenza è un asso, il gioco ottimale qui sarebbe 2, 3, 4b, 5, 4a. (Si può anche giocare 2, 3, 4 bis, invece, ma non è così buono.)

Credo che questo dovrebbe essere rappresentato come una sorta di grafo orientato. Si potrebbe avere bordi da 3 e da 2 a 4 bis e 4 ter da 2 e al 5, ma avresti anche bordi tra il 3 e 2 e tra il 4a e 5, dal momento che uno è giocabile dopo l'altro? In caso affermativo, il fatto che essi possono essere riprodotti in qualsiasi ordine (3 allora 2 o 2 quindi 3) formano un ciclo nel grafo che impedisce di utilizzare algoritmi efficienti "più lungo percorso"? (Credo che trovare il percorso più lungo in un grafico è NP-completo se il grafico contiene cicli.)

È stato utile?

Soluzione

Che cosa se rappresenti questo come un grafico del gioco-stato (con i potenziali prossimi stati calcolati al volo) - che non avrà cicli, che significa che è un DFS dritto sui potenziali stati del gioco (che potrebbe essere molto numerosi ancora) dal punto di partenza.

Altri suggerimenti

Il punto è costruire un grafo orientato aciclico con il minor numero di nodi possibili, i cui nodi bloccherebbe completamente lo spazio del fenomeno. Quindi è possibile eseguire il solito algoritmo.

Suggerisco una codifica in base alla forma della struttura delle carte rimanenti al tavolo.

I primi dati dello stato potrebbe essere l'ID univoco del più a sinistra - carta superiore. (Come ad esempio 4a, è unico nel senso che v'è una sola carta 4a). Il resto della forma può essere rappresentato da uno dei -1,0,1 per ogni carta disponibili (carta che è pronto per essere portato) descrive se la prossima carta a sinistra è sullo stesso 'livello' o è Sali profondo o superiore. (Questo sta sfruttando l'ipotesi che una scheda si sovrappone solo 2 altre carte e che la struttura assomiglia a quella che hai dato nell'esempio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top