Tableau deux dimenssions
Fermé
Utilisateur anonyme
-
20 mars 2013 à 22:33
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 21 mars 2013 à 16:06
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 21 mars 2013 à 16:06
A voir également:
- Tableau deux dimenssions
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Deux ecran pc - Guide
5 réponses
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
73
20 mars 2013 à 23:14
20 mars 2013 à 23:14
bonsoir,
pour etre sur la meme page, tu veux un tableau comme celui de sudoku?
pour etre sur la meme page, tu veux un tableau comme celui de sudoku?
ngounou25
Messages postés
96
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
5 juillet 2013
4
21 mars 2013 à 00:48
21 mars 2013 à 00:48
Salut,
Vu la description, y a aucun doute. C'est du Sodoku.
Beh comme je ne connais pas dans quel but tu voudrais cette algorithme, et surtout que je ne connais pas tes capacités d'appréhension, je te proposerais volontiers l'algorithme classique ; celui faisant usage de la récursivité : c'est simple, relativement facile à appréhender, mais c'est de la merde. Ton programme tournera un bon moment avant de te donner "une" configuration valide.
Pour ton problème (qui entre dans le cadre de l'intelligence artificiel), je te conseillerais de voir avec des algorithmes heuristiques ou/et les algorithmes méta-heuristique (de préférence) qui eux, sont beaucoup moins facile à cerner, mais les ayant sous la main.
Vu la description, y a aucun doute. C'est du Sodoku.
Beh comme je ne connais pas dans quel but tu voudrais cette algorithme, et surtout que je ne connais pas tes capacités d'appréhension, je te proposerais volontiers l'algorithme classique ; celui faisant usage de la récursivité : c'est simple, relativement facile à appréhender, mais c'est de la merde. Ton programme tournera un bon moment avant de te donner "une" configuration valide.
Pour ton problème (qui entre dans le cadre de l'intelligence artificiel), je te conseillerais de voir avec des algorithmes heuristiques ou/et les algorithmes méta-heuristique (de préférence) qui eux, sont beaucoup moins facile à cerner, mais les ayant sous la main.
tksteph
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
25
21 mars 2013 à 01:40
21 mars 2013 à 01:40
Salut,
Pout ton problème tels que tu le décris, tu peux modifier ton code comme suit,
List listeLigne;
List listeCol;
for (int i = 0; i < 9; i++)
{
listeLigne= new ArrayList(); // Tu crée une liste qui contiendra les differentes
// valeurs d'une ligne,
for(int j = 0; j < 9; j++)
{
ListeCol= new ArrayList();
int var = (int) (int)(Math.random() * 9) + 1;
while (listLigne.contains(var)){ //Vérifie que la ligne n'a pas la
//valeur
var = (int) (int)(Math.random() * 9) + 1;
for (int k=0; k<j;k++){
listeCol.add(T[k][j]); // La tu crée la liste des elements de la
// colonne dans laquelle tu te trouve
}
while (listeCol.contains(var)){
var = (int) (int)(Math.random() * 9) + 1; // Tu vérifie que ta colone ne
//contient pas déja la valeur
}
}
monTableau[i][j]= var;
System.out.print(monTableau[i][j]);
}
System.out.println();
}
En Gros avant d'affecter une valeur à une position donnée, tu vérifies dabord si elle ne figure pas déja sur la ligne ou la colonne
.
Un peu lourd comme Algo, mais il répond bien à ta question je crois
Si toutefois il s'agit effectivement du SUDOKU, tu peux proceder comme indiqué dans le post précedent, (Heuristique!)
Pout ton problème tels que tu le décris, tu peux modifier ton code comme suit,
List listeLigne;
List listeCol;
for (int i = 0; i < 9; i++)
{
listeLigne= new ArrayList(); // Tu crée une liste qui contiendra les differentes
// valeurs d'une ligne,
for(int j = 0; j < 9; j++)
{
ListeCol= new ArrayList();
int var = (int) (int)(Math.random() * 9) + 1;
while (listLigne.contains(var)){ //Vérifie que la ligne n'a pas la
//valeur
var = (int) (int)(Math.random() * 9) + 1;
for (int k=0; k<j;k++){
listeCol.add(T[k][j]); // La tu crée la liste des elements de la
// colonne dans laquelle tu te trouve
}
while (listeCol.contains(var)){
var = (int) (int)(Math.random() * 9) + 1; // Tu vérifie que ta colone ne
//contient pas déja la valeur
}
}
monTableau[i][j]= var;
System.out.print(monTableau[i][j]);
}
System.out.println();
}
En Gros avant d'affecter une valeur à une position donnée, tu vérifies dabord si elle ne figure pas déja sur la ligne ou la colonne
.
Un peu lourd comme Algo, mais il répond bien à ta question je crois
Si toutefois il s'agit effectivement du SUDOKU, tu peux proceder comme indiqué dans le post précedent, (Heuristique!)
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
73
Modifié par walidovich_85 le 21/03/2013 à 02:02
Modifié par walidovich_85 le 21/03/2013 à 02:02
Bonjour,
j'espère d'abord qu'il ne parle pas du Sudoku, car si c'est le cas, alors, y'a une route "of shit" de récursivité qui demande une logique dure en mathématique.
alors, s'il ne parle pas de Sudoku, c a dire, qu'il veux juste un tableau dont les éléments ne se répètent pas en ligne et en colonne, alors, le valeur minimale du maximum lié généré lié à "random" doit être= 9+9= 18: supposant qu'on va générer le dernier élément T(9,9), où il ya 8 valeurs différentes en ligne 9, et 8 valeurs différente en colonne 9, ceci implique alors, 8+8=16 valeurs différentes. et en ajoutant le dernier (+1), nous aurons au moins 17 valeurs différentes. d'où le max doit être obligatoirement supérieur ou égal à 18, pour éviter le cas des boucles infinies.
voila une ébauche qui fonctionne (j'ai bien sur éliminé le ZERO :D ):
public class tableau{
public static void main(String[] args) throws InterruptedException {
//déclaration du tableau
int[][] monTableau= new int[9][9];
//le max non atteint doit être au moin 18.
int max=18;
//remplissage de la matrice monTableau
for (int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
//première génération pou l'élément T(0,0)
int nbreGenere= (int) (Math.random()*max);
boolean existe=true;
while(existe){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//vérifier si la valeur générée est nulle.
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
//élément non trouvé puisque
//on a sortis de la boucle while
monTableau[i][j]=nbreGenere;
//un peu de stylisme pour l'affichage
if(monTableau[i][j]<10)
System.out.print("0"+monTableau[i][j]+" ");
else
System.out.print(monTableau[i][j]+" ");
}
System.out.println();
}
}
}
Being normal is boring... being geek is interesting
j'espère d'abord qu'il ne parle pas du Sudoku, car si c'est le cas, alors, y'a une route "of shit" de récursivité qui demande une logique dure en mathématique.
alors, s'il ne parle pas de Sudoku, c a dire, qu'il veux juste un tableau dont les éléments ne se répètent pas en ligne et en colonne, alors, le valeur minimale du maximum lié généré lié à "random" doit être= 9+9= 18: supposant qu'on va générer le dernier élément T(9,9), où il ya 8 valeurs différentes en ligne 9, et 8 valeurs différente en colonne 9, ceci implique alors, 8+8=16 valeurs différentes. et en ajoutant le dernier (+1), nous aurons au moins 17 valeurs différentes. d'où le max doit être obligatoirement supérieur ou égal à 18, pour éviter le cas des boucles infinies.
voila une ébauche qui fonctionne (j'ai bien sur éliminé le ZERO :D ):
public class tableau{
public static void main(String[] args) throws InterruptedException {
//déclaration du tableau
int[][] monTableau= new int[9][9];
//le max non atteint doit être au moin 18.
int max=18;
//remplissage de la matrice monTableau
for (int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
//première génération pou l'élément T(0,0)
int nbreGenere= (int) (Math.random()*max);
boolean existe=true;
while(existe){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//vérifier si la valeur générée est nulle.
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
//élément non trouvé puisque
//on a sortis de la boucle while
monTableau[i][j]=nbreGenere;
//un peu de stylisme pour l'affichage
if(monTableau[i][j]<10)
System.out.print("0"+monTableau[i][j]+" ");
else
System.out.print(monTableau[i][j]+" ");
}
System.out.println();
}
}
}
Being normal is boring... being geek is interesting
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ngounou25
Messages postés
96
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
5 juillet 2013
4
21 mars 2013 à 15:23
21 mars 2013 à 15:23
Salut,
S'il ne parle pas du Sodoku et que les contraintes ne sont liées qu'aux lignes et aux colonnes, alors je lui suggère de créer un truc aussi simple que le suivant :
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
Une boucle comme celle-ci le fait assez aisément :
S'il ne parle pas du Sodoku et que les contraintes ne sont liées qu'aux lignes et aux colonnes, alors je lui suggère de créer un truc aussi simple que le suivant :
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
Une boucle comme celle-ci le fait assez aisément :
for(int i = 0; i < 9; i++) for(int j = 0; j < 9; j++) { monTableau[i][j] = (i + j + 1) % 9; }
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
73
21 mars 2013 à 16:06
21 mars 2013 à 16:06
on peut meme générer un tableau sudoku, (fake) sans random. il suffit de décaler les valeurs.
mais la présence de random donne de la vivacité et du dynamisme aux nombres et au tableau bien sur.
mais la présence de random donne de la vivacité et du dynamisme aux nombres et au tableau bien sur.