Algoritmul, pas cu pas
Un drum valid folosește cel mult culori la nodurile intermediare (nodurile și sunt necolorate, deci mereu permise). Cheia: ducem informația despre culorile folosite în starea căutării.
Dijkstra pe stări
Starea e perechea , unde e mulțimea exactă a culorilor folosite pe drum până acum, de cel mult culori. Tranziție de la pe un vecin :
- formăm (dacă e colorat);
- dacă , mutarea e interzisă (am folosi culori);
- altfel relaxăm starea cu costul .
Rulăm Dijkstra peste aceste stări. Costul minim e .
Numărarea și reconstituirea
Pe lângă distanță ținem, pentru fiecare stare:
- — numărul de drumuri de cost minim până la ea (modulo ); când relaxăm strict, copiem ; când găsim un cost egal, adunăm -urile;
- — starea din care am ajuns la cost minim, pentru a reconstrui un drum la final.
Numărul cerut e suma -urilor stărilor care ating costul minim. Fiindcă fiecare drum are o mulțime exactă de culori, nu numărăm de două ori același drum.