est ce que vous pouver me proposer une idée comment créer une matrice binaire qui contient un nombre fixe de 1 je vais moi meme la developper
j'ai fait une mais le probleme ce qu'elle m'a donné une boucle infinie
Oui.
Si tu veux éviter ça, tu fais tout linéairement.
si ta matrice fait m*n, alors tu tires un nombre index aléatoire entre 0 et m*n-1 - (nombre de cases déjà trouvées).
A cet index, tu ajoutes le nombre de cases trouvées ayant un index inférieur à l'index que tu as trouvé (optimisable). Tu réitères cette dernière opération, car il se peut qu'il y ait des case trouvées entre l'index initial et le nouvel index. Tu réitères jusqu'à ce que l'index ne bouge plus (tout ça est probablement optimisable en ne faisant que des +1).
Enfin, pour connaitre la position dans ta matrice 2D:
y = index / m (division entière)
x = index % m (modulo ou reste de la division entière)
C'est classique c'est comme pour déterminer la position d'un pixel avec sa position dans le buffer d'écran.
De cette façon, tu ne choisis que parmi les cases à 0, et surtout tu choisis les cases de manière uniforme.
Une autre possibilité, plus lourde (pas optimisée du tout), mais plus simple à concevoir, c'est de faire une liste de toutes les cases et de choisir au hasard dans la liste. Chaque case trouvée est retirée de la liste pour ne pas la rechoisir.
------------------------------6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
en fait, lors que tu as déjà choisis 5 cases, il te reste à choisir parmi m * n - 5 cases. Donc ton nombre aléatoire va de 0 à m * n - 5. C'est comme si tu numérotais les cases restantes et que tu choisi le numéro.
Si entre 0 et 10, tu as déjà choisi 2 cases, et que tu tombes au hasard sur la 11ème case libre, la 11ème case libre est en fait la 11 +2 = 13 ème case.
------------------------------6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
n2 represente le nombre de case qu'on a choisi
n1 le nombre de case qui ont l'indexe inferieur à celui trouvé
nba le nombre de 1 que doit contenir la matrice sachant que dans la diagonle il n'y a que des 0
int [] mm = new int [nba]
mm contient l'index de la case trouver pour que je puisse le comparer apré
et elle est initialisée à -1
bn en plus la matrice est symetrique
donc je ne dois pas choisir la case dans toute la matrice mais seulement dans la partie sup ou inf et affecter le 1 à la case symetrique de celle trouvée
Déjà, n'utilise pas n1, à chaque case inférieure, incrémente "a" (du coup, il faut que mm soit trié dans l'ordre), parce que si tu passe par n1 et que tu as par exemple n1=10, tu peux aussi avoir des cases déjà choisies entre a et a+10, et a+10 peut aussi être une case déjà choisie.
En modifiant "a", tu teste la prochaine case avec la nouvelle valeur de a décalée, et donc au final, tu prendras toutes les cases en compte.
Ensuite, le calcul de x et y n'est plus bon puisque tu as un triangle, le calcul est forcément différent.
Enfin, tu n'as pas besoin de n2, puisque "i" est déjà le nombre de cases trouvées, mais ça c'est pas grave.
Ceci dit, je ne vois pas pourquoi ton programme bloque. Tu as bien initialisé nba?
------------------------------6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois. Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.