Considérons un jeu de cartes sur le modèle de Tower Solitaire, Tripeaks, ou Fairway Solitaire: la table se compose d'un certain nombre de cartes immédiatement disponibles, chacune pouvant couvrir d'autres cartes en dessous (les empêchant d'être joués). Vous avez une carte "fondation", et vous pouvez retirer une carte de la table si elle se trouve exactement au-dessus ou au-dessous de votre carte de fondation, à quel moment elle devient votre nouvelle carte de base. Vous avez un nombre limité de cartes de remplacement à tirer quand vous ne pouvez pas jouer une carte depuis la table, donc vous voulez généralement jouer la plus longue séquence de cartes possible. D'abord, comment représenteriez-vous le conseil pour faciliter la recherche d'une solution? Deuxièmement, quel algorithme utiliseriez-vous pour trouver la plus longue séquence jouable?Structure/algorithme pour résoudre le jeu avec des cartes qui se chevauchent
Exemple:
-4a- -5- -3- -2- -4b-
cartes sur les cartes de bloc en bas au-dessus d'être retiré: vous ne pouvez pas retirer 4a jusqu'à ce que les 3 et 2 sont partis. En supposant que votre carte de départ est un as, le jeu optimal ici serait 2, 3, 4b, 5, 4a. (Vous pouvez jouer 2, 3, 4a à la place, mais ce n'est pas aussi bon.)
Je suppose que cela devrait être représenté comme une sorte de graphe orienté. Vous auriez des bords de 3 et 2 à 4a et de 2 et 4b à 5, mais auriez-vous aussi des bords entre 3 et 2 et entre 4a et 5, puisque l'un est jouable après l'autre? Si oui, est-ce que le fait qu'ils puissent être joués dans n'importe quel ordre (3 puis 2, ou 2 puis 3) forme un cycle dans le graphique qui vous empêche d'utiliser les algorithmes efficaces du "plus long chemin"? (Je crois que trouver le plus long chemin dans un graphe est NP-complet si le graphe contient des cycles.)
Programmation dynamique ... Knapsacking ... vous pouvez appliquer dijkstra à votre graphique ... –
L'algorithme de Dijkstra trouve le chemin le plus court. Nier les poids le ferait trouver le chemin le plus long, mais cela ne fonctionnera pas si le graphique contient des cycles, n'est-ce pas? –
Je serais tenté de brutaliser celui-ci. Il semble peu probable que vous exponentiez en pratique. –