Algo de backtracking
Fermé
marianne31
Messages postés
68
Date d'inscription
vendredi 2 mai 2003
Statut
Membre
Dernière intervention
29 mars 2006
-
28 avril 2005 à 11:48
EulerDZ - 15 juin 2010 à 15:14
EulerDZ - 15 juin 2010 à 15:14
A voir également:
- Algo de backtracking
- Telecharger algo pour pc - Télécharger - Édition & Programmation
- Algo prono - Télécharger - Sport
- Pgcd algo - Forum Programmation
- ALGO ET PASCAL - Forum Pascal
- Algo jeux de dame - Forum Programmation
3 réponses
Backtrack sur a2b3 : quelles sont les différentes manières de placer 2 'a' et 3 'b' :
On a :
[a, a, b, b, b]
[a, b, a, b, b]
[a, b, b, a, b]
[a, b, b, b, a]
[b, a, a, b, b]
[b, a, b, a, b]
[b, a, b, b, a]
[b, b, a, a, b]
[b, b, a, b, a]
[b, b, b, a, a]
Nb sol = 10
import java.util.*; class Backtracka2b3{ public static void resolution(int maxA, int maxB){ Stack<Character> pile = new Stack<Character>(); int nbA = 0; int nbB = 0; int position = 0; int nbSolution = 0; char valeurCourante = premValPossible(nbA,nbB,maxA,maxB); while(estDansGrille(position)){ while(valeurCourante!=' '){ if(valeurCourante=='a') nbA++; if(valeurCourante=='b') nbB++; pile.push(valeurCourante); if(estSolution(nbA,nbB,maxA,maxB)){ System.out.println(pile); nbSolution++; valeurCourante = valSuivantePossible(valeurCourante,nbB,maxB); char c = pile.pop(); if (c=='a') nbA--; if (c=='b') nbB--; }else{ position = posSuivante(position); valeurCourante = premValPossible(nbA,nbB,maxA,maxB); } } position = posPrecedente(position); if(!pile.empty()){ char c = pile.pop(); if (c=='a') nbA--; if (c=='b') nbB--; valeurCourante = valSuivantePossible(c,nbB,maxB); } } System.out.println("Nb sol = "+nbSolution); } public static char premValPossible(int nbA, int nbB, int maxA, int maxB){ if(nbA<maxA){ return 'a'; } else if(nbB<maxB){ return 'b'; } else return ' '; } public static boolean estSolution(int nbA, int nbB, int maxA, int maxB){ return (nbA==maxA && nbB==maxB); } public static int posSuivante(int pos){ return pos+1; } public static int posPrecedente(int pos){ return pos-1; } public static char valSuivantePossible(char val, int nbB, int maxB){ if(val=='a'){ if(nbB<maxB){ return 'b'; } else return ' '; }else{ return ' '; } } public static boolean estDansGrille(int pos){ return pos>=0; } public static void main(String[] args){ int maxA = 2; int maxB = 3; resolution(maxA,maxB); } }
On a :
[a, a, b, b, b]
[a, b, a, b, b]
[a, b, b, a, b]
[a, b, b, b, a]
[b, a, a, b, b]
[b, a, b, a, b]
[b, a, b, b, a]
[b, b, a, a, b]
[b, b, a, b, a]
[b, b, b, a, a]
Nb sol = 10
15 juin 2010 à 15:14
using System;
class Program
{
static int nbB = 2, nbA = 3;
static void Main(string[] args)
{
f("", 'a', 0, 0);
f("", 'b', 0, 0);
}
static void f(string st, char ch, int a, int b)
{
st += ch;
if (ch == 'a') a++;
else b++;
if (a == nbA && b == nbB)
Console.WriteLine(st);
else
{
if (a < nbA) f(st, 'a', a, b);
if (b < nbB) f(st, 'b', a, b);
}
}
}