Les philosophes ont longtemps réfléchi au problème du chariot . Malheureusement, aucun humain n'a encore résolu ce problème. Heureusement, en tant que programmeurs, nous pouvons utiliser des ordinateurs pour résoudre le problème pour nous!
Contribution
Votre programme prendra en entrée un graphe orienté (fini) (avec au plus une arête de x
à y
, pour tout x
et y
), avec un nœud désigné, et un entier non négatif attaché à chaque arête (représentant le nombre de personnes liées à cette piste) . De plus, chaque nœud a au moins un bord de sortie.
Le chariot démarre au nœud désigné. À chaque tour, si le chariot est au nœud x
, l'utilitaire sélectionne un bord (x,y)
. Les gens sur ce bord meurent et le chariot est maintenant au bord y
. Ce processus se poursuit pour toujours.
Notez que les gens ne peuvent mourir qu'une seule fois, donc si le bord (x,y)
a des n
gens attachés et que le chariot les traverse, disons, 100 fois, cela n'entraînera que des n
morts.
Production
L'utilitariste fait ses choix de manière à minimiser le nombre de personnes qui meurent (ce qui est garanti d'être fini, car il n'y a que des personnes finies). Votre programme affichera ce numéro.
Format d'entrée
Vous pouvez prendre le graphique d'entrée de la manière raisonnable qui vous convient. Par exemple, vous pouvez le prendre comme une matrice et compter le nœud désigné comme celui étiqueté 0. Ou vous pouvez utiliser quelque chose comme x1,y1,n1;x2,y2,n2;...
. Par exemple 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
pour représenter le problème du chariot standard (avec des boucles à la fin).
Cas de test
0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
-> 1 (passer de 0 à a, a à c (tuer une personne), puis continuer à boucler le chariot de c à c).0,0,1;0,a,5;a,a,0
-> 1 (Continuez de 0 à 0, écrasez-vous sur 1 personne pour l'éternité),0,a,5;0,b,1;a,a,1;b,b,6
-> 6 (0 -> a -> a -> a -> a -> ... (notez que la solution gourmande d'aller en b serait incorrecte))0,a,1;0,b,5;a,b,1;b,a,1
-> 3 (0 -> a -> b -> a -> b -> ...)0,a,1;0,b,1;a,a,0;b,b,0
-> 1 (Notez qu'il existe deux options différentes que l'utilitaire pourrait prendre pour que les deux ne tuent qu'une seule personne)
Il s'agit de code-golf , donc la réponse la plus courte l'emporte! Bonne chance.
Remarques: Il n'y aura pas de boucles de boucle malade et la dérive multipiste est interdite. Aussi, bien que je préfère penser à ce problème en termes des trois lois (/ s) d'Asimov, Peter Taylor a noté dans le bac à sable que ce problème est mathématiquement équivalent à celui de trouver le rho (chemin de retour des boucles sur lui-même) de poids le plus faible .