begin process at 2012 05 27 16:35:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > GÉNÉRATION D'UNE LISTE DES COMBINAISONS SANS RÉPÉTITION D'ÉLÉMENTS D'UN GROUPE DE TABLEAUX

GÉNÉRATION D'UNE LISTE DES COMBINAISONS SANS RÉPÉTITION D'ÉLÉMENTS D'UN GROUPE DE TABLEAUX


 Information sur la source



 Description

Le titre est long parce qu'il traduit mon ignorance de ce que fait en terme mathématique cet algorithme (Mais en tout cas, il le fait) :
Si quelqu'un veut suggérer un autre titre, il est le bienvenu.

L'idée était la suivante :

Si on considere 5 (ou m) tableaux de variables (structures) chacun de ces tableaux contient n éléments.
je voudrais calculer toutes les solutions possibles en parcourant chaque tableau et chaque variables.
petit exemple:
Tableau1   Sol1-1   Sol1-2   Sol1-3
Tableau2   Sol2-1   Sol2-2
Tableau3   Sol3-1   Sol3-2   Sol3-3   Sol3-4
Tableau4   Sol4-1   Sol4-2   Sol4-3
Tableau5   Sol5-1   Sol5-2

La premiere solution globale serait:
Sol1-1,Sol2-1,Sol3-1,Sol4-1,Sol5-1
La deuxieme
Sol1-1,Sol2-1,Sol3-1,Sol4-1,Sol5-2
La troisieme
Sol1-1,Sol2-1,Sol3-1,Sol4-2,Sol5-1
etc.. .

Source

  • #include "stdafx.h" // Pour windows uniquement
  • #include <stdlib.h>
  • #include <string.h>
  • #include <time.h>
  • // Changer ici le nombre de tableaux a traiter
  • // (Doit être connu à la compilation)
  • #define MAXTAB 3
  • #define TAILLE 7
  • #define MAXRAND 5
  • typedef struct {
  • int Dim; // Taille du tableau
  • char **Tab; // Tableau de chaines ("Sol1-1", "Sol1-2"..)
  • } _Tabs, *_pTabs;
  • typedef int SubTab[MAXTAB];
  • // Calcul et affichage des solutions
  • void AfficherSol (_pTabs Tabs, SubTab Index, int Niveau) {
  • int IdxEle;
  • if ( Niveau == MAXTAB ) {
  • for ( int Idx = 0; Idx < MAXTAB; Idx++ )
  • printf ("%s ", Tabs[Idx].Tab[Index[Idx]]);
  • puts("");
  • return;
  • }
  • for (IdxEle = 0 ; IdxEle < (*(Tabs+Niveau)).Dim ; IdxEle++ ) {
  • Index[Niveau] = IdxEle;
  • AfficherSol (Tabs, Index, Niveau+1);
  • }
  • }
  • int main(int argc, char* argv[]) {
  • _Tabs Tabs[MAXTAB];
  • int IdxTab, IdxEle;
  • char Element[TAILLE];
  • SubTab Index;
  • // Création des tableaux
  • srand((unsigned)time( NULL ));
  • for ( IdxTab = 0; IdxTab < MAXTAB; IdxTab++ ) {
  • Tabs[IdxTab].Dim = rand()%MAXRAND + 1;
  • Tabs[IdxTab].Tab = (char **) malloc (sizeof(char *)*Tabs[IdxTab].Dim);
  • for ( IdxEle = 0; IdxEle < Tabs[IdxTab].Dim; IdxEle++ ) {
  • Tabs[IdxTab].Tab[IdxEle] = (char *) malloc (sizeof(char)*TAILLE);
  • sprintf (Element, "Sol%1d-%1d", IdxTab+1, IdxEle+1);
  • strcpy (Tabs[IdxTab].Tab[IdxEle], Element);
  • }
  • }
  • // Affichage des tableaux
  • for ( IdxTab = 0; IdxTab < MAXTAB; IdxTab++ ) {
  • printf ("Tableau numero %d : ", IdxTab+1);
  • for ( IdxEle = 0; IdxEle < Tabs[IdxTab].Dim; IdxEle++)
  • printf ("%s ", Tabs[IdxTab].Tab[IdxEle]);
  • puts("");
  • }
  • puts("");
  • // Affichage de la solution
  • AfficherSol((_pTabs) &Tabs, Index, 0);
  • return 0;
  • }
#include "stdafx.h" // Pour windows uniquement
#include <stdlib.h>
#include <string.h>
#include <time.h>

// Changer ici le nombre de tableaux a traiter
// (Doit être connu à la compilation)
#define MAXTAB 3
#define TAILLE 7
#define MAXRAND 5

typedef struct {
    int Dim; // Taille du tableau
    char **Tab; // Tableau de chaines ("Sol1-1", "Sol1-2"..)
} _Tabs, *_pTabs;

typedef int SubTab[MAXTAB];

// Calcul et affichage des solutions
void AfficherSol (_pTabs Tabs, SubTab Index, int Niveau) {   

    int IdxEle;

    if ( Niveau == MAXTAB ) {
        for ( int Idx = 0; Idx < MAXTAB; Idx++ )
            printf ("%s ", Tabs[Idx].Tab[Index[Idx]]);
        puts("");
        return;
    }
    for (IdxEle = 0 ; IdxEle < (*(Tabs+Niveau)).Dim ; IdxEle++ ) {
        Index[Niveau] = IdxEle;
        AfficherSol (Tabs, Index, Niveau+1);
    }
}

int main(int argc, char* argv[]) {

    _Tabs Tabs[MAXTAB];
    int IdxTab, IdxEle;
    char Element[TAILLE];
    SubTab Index;

    // Création des tableaux
    srand((unsigned)time( NULL ));
    for ( IdxTab = 0; IdxTab < MAXTAB; IdxTab++ ) {
        Tabs[IdxTab].Dim = rand()%MAXRAND + 1;
        Tabs[IdxTab].Tab = (char **) malloc (sizeof(char *)*Tabs[IdxTab].Dim);
        for ( IdxEle = 0; IdxEle < Tabs[IdxTab].Dim; IdxEle++ ) {
            Tabs[IdxTab].Tab[IdxEle] = (char *) malloc (sizeof(char)*TAILLE);
            sprintf (Element, "Sol%1d-%1d", IdxTab+1, IdxEle+1);
            strcpy (Tabs[IdxTab].Tab[IdxEle], Element);
        }
    }
    // Affichage des tableaux
    for ( IdxTab = 0; IdxTab < MAXTAB; IdxTab++ ) {
        printf ("Tableau numero %d : ", IdxTab+1);
        for ( IdxEle = 0; IdxEle < Tabs[IdxTab].Dim; IdxEle++)
            printf ("%s ", Tabs[IdxTab].Tab[IdxEle]);
        puts("");
    }
    puts("");
    // Affichage de la solution
    AfficherSol((_pTabs) &Tabs, Index, 0);
    return 0;
}



 Sources du même auteur

Source avec Zip COMMUNICATION INTER PROCESSUS PAR IPC SOUS *NIX
Source avec Zip SQUELETTE DE COMMUNICATION PAR SOCKET EN MODE CONNECTÉ POUR ...
TRI PAR INSERTION AVEC SENTINELLE
GÉNÉRATION D'UNE PERMUTATION ALÉATOIRE, SANS RETIRAGE

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
Source avec Zip Source avec une capture RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGEN... par Gallien69
MASTER MIND CONSOLE par bast63
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen

Commentaires et avis

Commentaire de rambc le 29/08/2006 10:40:25

Tu chercher toutes les PERMUTATIONS possibles des éléments des divers tableaux. Voilà pour le terme math. précis.

Commentaire de Amina7 le 01/02/2008 00:05:47

Salut tout le monde , svp j'ai besoin la solution de l'algorithme implementation des liste. qui peut me aide svp ?

Commentaire de dida87 le 06/04/2010 12:37:20

bonjour,s'il n ya pas d'inconvenient ,vous pouvez m'expliquer ce code car j'ai in prijet qui demande de generer toutes les combinaisons entres un groupe de tableau tel que chaque tableau contient des combinaisons entres les elements de ce tableau,merci
vraiment c'est urgent,j'apprecis votre aide.

Commentaire de dida87 le 06/01/2011 15:54:28

bonjour,si qlq 'un pourratit m'aider,alors mon probleme que j'ai des fichiers texte et je charge leur contenu dans des tableaux,pour que je fasse la combinaison de ces tableaux,j'apprecie bien votre aide,merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tableau de liste chainee [ par melanie ] comment peut on remplir les cases d'un tableau avec des chainons déclarés comme :typedef struct chainon *listetypedef struct chainon {intval;liste sui Combinaison des entiers [ par ghada ] J'aime bien avoir un algorithme qui permet de générer toutes les combinaisons d'une liste d'entiers c'est à dire 2^n avec n le nombre d'entiers de la Liste chainé - Tableau dynamique [ par Alucard ] Bonjour,Je me demandais quel était le meilleur choix à faire entre ces 2 systèmes de gestion de suite d'objets en mémoire.J'hésite un peu car finaleme clonage de liste chainée et suppression [ par avillenave ] Bonjour, Je d&#233;veloppe actuellement en C, un algo de recuit simul&#233; avec un calcul d'entropie J'ai un tableau de liste chain&#233;e B Comment recupéré un element d'une liste? [ par Sat83 ] Bonjour!J'ai une liste d'Objet:list&lt;Data *&gt; canaux;O&#249; Data est une classe...Comment faire pour r&#233;cup&#233;r&#233; le Ni&#232;me elemen REcuperer des donnée d'un fichier binaire vers une tableau de hachage [ par whiteknight ] Slt j'ai des problemes avec ma fonction load qui me permet de recuperer les données d'un fichier binaire et de les transférer vers un tableau de hacha tableau sans repetition [ par locus ] bonjour, dans un programme que je dois faire,  j'ai une liste de valeurs donnees et je dois remplir un tableau multiple  avec. du style si je dois fai PB tableau [ par petitavion414 ] Bonjour à tousJe vous explique mon problème qui me resiste depuis longtemps :J'ai une classe mère qui s'appelle ouvrages (qui est de plus une abstract Fichiers binaires [ par lektrosonic ] Bonsoir,supponsons que j'ai un liste ou un tableau d'une structure quelquonque. (on ne connai pas la taille du tableau)Je voudrais ecrire la totalite tableau de liste [ par kenikun ] Bonjour,J'ai un programme en C avec une liste chainee simple dont voici la declaration :[code]typedef struct Element_{    int map;    char val[4];    


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales