Le problème est au moins NP-difficile, par une réduction de 3-SAT.
Considérez d'abord le problème de trouver un chemin du début à la sortie du graphique dirigé suivant avec la restriction qu'aucun chemin ne peut visiter les trois nœuds (carrés) d'une clause:
(X1∨X2∨X3)∧(X1∨¬X2∨X4)
Nous transformons ces graphiques en un réseau de commutateurs. Pour cela, nous utilisons trois gadgets:
- Chaque nœud de cercle et bord bidirectionnel devient un fil , formant les connexions entre les commutateurs.
- Chaque bord dirigé devient un gadget unidirectionnel composé d'un seul interrupteur (voir ci-dessous).
- Chaque nœud carré représente l'un des trois commutateurs qui font partie d'un gadget Clause (voir ci-dessous).
Dans les illustrations suivantes, les commutateurs sont dessinés sous la forme de deux flèches entrantes, dont l'une est pointillée (désactivée). La direction cible est dessinée avec un cercle noir (de telle sorte que la flèche pleine doit finalement être sur le côté du cercle).
Remarque: Nous utiliserons des caractères gras pour distinguer la sortie du graphique des sorties de gadgets.
ABBAX1X2X3X1′X2′X3′
Rappelons que pour le graphique d'origine, trouver un chemin qui a conduit à la sortie et n'a pas visité les trois nœuds carrés d'une clause était NP-complet. Considérons maintenant le problème de l'atteinte de la sortie du graphe transformé sans se soucier des positions cibles des commutateurs.
Observez que tout chemin qui est une solution au problème de graphe d'origine est également une solution pour le graphe transformé. Supposons donc qu'un chemin pour le graphe transformé ne soit pas une solution pour le graphe d'origine. Cela peut se produire dans deux cas:
- BA
- Un chemin parcourt les trois chemins d'un gadget de clause .
Dans le premier cas, le gadget unidirectionnel doit d'abord avoir été parcouru dans la direction souhaitée, auquel cas le chemin aurait tout aussi bien pu éviter de le traverser en premier lieu.
Considérez donc le deuxième cas où le chemin traverse les trois commutateurs d'un gadget Clause . Ensuite, ce gadget aura ses trois commutateurs inversés (voir ci-dessous). C'est là que nous utilisons les positions cibles. Notez que l' épine dorsale grise du gadget Clause ne peut plus être atteinte, ce qui signifie que les commutateurs ne peuvent plus être dirigés vers leurs positions cibles. Dans ce cas, nous disons que ce gadget de clause est irrécupérable.
Il reste à montrer que pour toute solution du problème de graphe d'origine, les interrupteurs du graphe transformé peuvent être placés dans leur position cible. Pour cela, nous utilisons le fait que le fil de sortie ne peut être atteint que lorsqu'il existe une solution, ou qu'un gadget Clause devient irrécupérable.
Pour placer les commutateurs dans leur position cible, nous pouvons maintenant ajouter des gadgets unidirectionnels supplémentaires du fil de sortie à l'entrée de chaque gadget unidirectionnel existant , ainsi qu'aux trois fils de sortie de tous les gadgets de clause . Ensuite, une fois que le jeton atteint la sortie , tous les gadgets unidirectionnels supplémentaires peuvent être parcourus (et ainsi placés dans leur position cible), et également placer les commutateurs restants dans leurs positions cibles (sauf s'il existe une clause irrécupérable). Enfin, le jeton peut retourner à la sortie et le puzzle est résolu.
Nous devons remarquer que les gadgets Clause ne peuvent être récupérés que lorsqu'ils sont entrés à partir d'une sortie non traversée; et en raison des gadgets unidirectionnels qui sont placés entre les gadgets Clause et la variable suivante, cela ne peut se produire que lorsque le fil de sortie est atteint.
Par conséquent, le problème du réseau de commutation est NP-difficile.
On ne sait toujours pas si le problème est en NP ou PSPACE-hard. Une réduction de la dureté NP en construisant un réseau de commutateurs plan aura de grandes implications pour les variantes restreintes de Sokoban, notamment parce que tous les commutateurs sont équivalents au gadget Sokoban ci-dessous.