KungFuChaos
Messages postés25Date d'inscriptionmercredi 26 décembre 2007StatutMembreDernière intervention 2 juin 2011
-
2 juin 2011 à 01:21
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 2019
-
2 juin 2011 à 17:02
Bonjour à tous,
J'ai un tableau à double entrée de ce style, avec lequel je voudrais travailler :
C'est un tableau à 11 lignes et 11 colonnes (toujours). Je souhaiterai avoir la meilleure somme possible de tous les croisements entre les lignes et les colonnes (une colonne ne se croisant qu'avec une seule ligne et vice versa).
Par exemple, dans l'exemple çi-dessus, les meilleurs croisements sont entre la ligne 1 et la colonne 2, la ligne 2 et la colonne 1 et la ligne 3 avec la colonne 3, donc 25 + 70 + 80 = 175.
Le but n'est pas forcément de trouver LA meilleure solution, mais une s'en rapprochant le plus possible.
En espérant avoir été assez clair.
J'espère que quelqu'un pourra m'éclairer un temps soit peu.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 juin 2011 à 03:58
Salut
Donc, si je traduis, tu veux rechercher la plus grande valeur ("meilleure somme") de chaque ligne ?
Si c'est ça, suffit de faire deux boucles imbriquées :
Une boucle pour scruter les lignes 1 à 11
Une autre boucle pour scruter les colonnes 1 à 11 de la ligne en cours.
Si c'est pas ça, tu t'es mal exprimé et/ou ton exemple est mal choisi, trop particulier.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
On peut voir que dans ce tableau, sur chaque ligne, c'est dans la colonne 5 que l'on a les plus grandes valeurs. Mais chaque colonne ne peut être utilisé qu'une seule fois, c'est-à-dire qu'une seule ligne ne sera associée à cette colonne.
Le but est que la somme des 11 couples (vu qu'il y a 11 lignes et 11 colonnes) soit la plus haute possible.
J'ai souligné ce que pourrait être le résultat final.
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 2 juin 2011 à 17:02
Pas si simple
j'ai pensé d'abord de mettre tous les nombres avec line col
dans un tableau et trié
selon ton tableau
97 4,5
94 7,5
94 10,5
etc
et après je commence à additioner en cherchant
le plus grand nombre libre
ici 97 aussi j'ajoute dans un vecteur la rangée et la colonne donc 4,5
on passe au nombre suivant comme 94 apparait
plusieurs fois mais aucun ne peut etre pris
sois la rangée et déja utilisé sois la colonne
et ainsi de suite
mais on a pas encore fini
il faut recomencer mais à partir d'où
je cherche l'avant dernier nombre choisi si
il apparait plusieurs fois je choisi un autre
possibilité et continue
et recommence
par ex l'avant dernier chiffre choisi est 20
comme 20 apparait plusieurs fois je choisi
un autre 20 et à partir de la je continue
donc si j'ai x fois le nombre 20 je recommence
x fois tout en respectant la règle rangée colonne
quand j'ai terminé avec le 20 je recherche le
nombre d'avant
donc à un stade tu vas arrivé à 94
bien il faut mettre chaque résultat dans un tableau
le piège est pas toujours le plus grand nombre
choisi est la meilleur solution
voila en gros avec surement des conneries dans
l'algorithm
comme en vba je suis plutot
je vais essayer en vb.net