Résoudre efficacement un nonogramme ne signifie pas examiner toute la grille en boucle. Un bon balayage consiste à suivre les endroits où l'information vient de changer.
Chaque case appartient à une ligne et une colonne. Lorsqu'une direction force un nouvel état, l'autre direction reçoit immédiatement une contrainte supplémentaire.
Le principe du balayage
Une routine simple est :
- choisir une ligne productive ;
- appliquer toutes les déductions certaines qu'elle permet ;
- noter quelles colonnes ont changé ;
- inspecter ces colonnes en priorité ;
- suivre les nouvelles lignes affectées ;
- continuer jusqu'à ce que la cascade s'arrête.
Ce cycle est plus efficace qu'un balayage aveugle de chaque ligne après chaque petit changement.
Balayer toutes les lignes au début
Un passage global est utile pour prendre connaissance de la grille.
Au premier tour, recherchez notamment :
- lignes vides ;
- ajustements exacts ;
- longs blocs ;
- faible marge ;
- contraintes proches des bords.
Une fois les premières cases obtenues, passez d'un balayage purement séquentiel à un balayage guidé par les changements.
Priorisez les lignes modifiées
Si une nouvelle croix apparaît dans une colonne, cette colonne peut soudain :
- perdre plusieurs placements ;
- se découper en segments ;
- rendre une case inaccessible ;
- identifier un bloc ;
- produire un chevauchement.
De même, une nouvelle case remplie peut lier un fragment à un bloc particulier et réduire fortement ses positions possibles.
Suivez les cascades
Une bonne déduction en déclenche souvent une autre.
Par exemple :
- une ligne force une case remplie ;
- la colonne correspondante complète un bloc ;
- les cases adjacentes deviennent vides ;
- ces croix découpent deux lignes ;
- l'un des nouveaux segments s'ajuste exactement.
Interrompre cette chaîne pour revenir trop tôt à une zone sans changement fait perdre du temps.
Quand refaire un balayage global ?
Un passage complet reste utile lorsque :
- une cascade locale vient de se terminer ;
- vous ne savez plus quelles lignes ont changé ;
- plusieurs régions indépendantes sont ouvertes ;
- vous avez appliqué une déduction importante qui peut avoir des conséquences lointaines ;
- vous êtes bloqué et voulez vérifier les déductions simples oubliées.
Le balayage global est donc un outil de récupération et de synchronisation, pas la seule façon de résoudre.
Une ligne peut devenir productive sans changer directement
Supposons qu'une colonne force une croix. La ligne de cette case a changé immédiatement.
Mais cette nouvelle contrainte peut aussi terminer un bloc, ce qui ajoute une autre croix plus loin dans la ligne et touche une seconde colonne. L'effet se propage.
C'est pourquoi il faut penser en réseau de contraintes, pas en listes indépendantes.
Ne rebalayez pas avec la même profondeur partout
Toutes les lignes ne méritent pas une analyse complète à chaque passage.
Pour une ligne très ouverte, vérifiez rapidement s'il existe une déduction évidente puis passez à autre chose. Pour une ligne serrée ou récemment modifiée, examinez les placements, les segments ou les motifs valides plus attentivement.
Le temps d'analyse doit suivre la quantité de contrainte disponible.
Utilisez les cases vides comme des événements
Les joueurs débutants réagissent souvent davantage aux nouvelles cases remplies qu'aux nouvelles croix.
C'est une erreur stratégique. Une croix peut :
- couper un bloc de certaines positions ;
- rendre un espace trop petit ;
- forcer deux fragments à appartenir au même bloc ou à des blocs différents ;
- découper une longue ligne.
Toute nouvelle case certaine, remplie ou vide, mérite un recoupement.
Garder une file mentale de lignes à vérifier
Vous n'avez pas besoin d'un véritable algorithme, mais le modèle des solveurs est utile : lorsqu'une case change, sa ligne et sa colonne deviennent des tâches prioritaires.
Sur une grande grille, vous pouvez même utiliser visuellement des repères ou une légère surbrillance pour savoir quelles lignes doivent encore être revisitées.
FAQ
Faut-il alterner exactement une ligne puis une colonne ?
Non. Suivez les changements. Une seule ligne peut modifier plusieurs colonnes et déclencher une cascade entière dans cette direction.
Est-ce mauvais de faire des balayages complets ?
Non. Ils sont utiles, surtout au départ et lors d'un blocage. Ils deviennent simplement inefficaces s'ils remplacent systématiquement le suivi des lignes réellement modifiées.
Que faire si je ne sais plus où reprendre ?
Effectuez un passage global des lignes les plus contraintes, puis reprenez la propagation à partir de la première nouvelle déduction.