Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 26-02-2022 10:32:03

Saule
Invité

Le problème des n dames optimitation

Bonjours/Bonsoir,

J'ai u a faire ré-cament a faire a ce problème, avec un plateaux de 10*10.
L’idée pour ce qui ne connaisse pas ce problème, c'est de placer n dames(d’échec) dans un échiquier de n*n, sans quel puise se toucher en un coup.
Je devais donc coder un programme qui trouve toutes le solution a ce problème, j'ai donc coder un petit code en C qui trouve les 724 solution a ce problème.
Je viens bien sur pas ici sans but, un ami a moi a remarquer que les solution sont modifiable facilement pour en obtenir d'autres :

(Les chiffre sont la lignes et l'emplacement des chiffre est la colonne.)
0257948136
6318497520

C'est assez basic comme méthode mais en cherchant un peu on a trouver un truc un peu plus puissant.
L'idée est de faire 9 - x sur tout les chiffre trouver.

0257948136
9742051863

L'idée est simple a comprendre, comme il est pas important de prendre en compte les casse blanche est noir dans ce problème on peut tout simplement retourner la plateaux pour avoir une autre solution.
C'est très puissant car ça divise par 2 le nombre de solution a trouver pour avoir les 724 solution.

Je pense qu'il est possible de réduire beaucoup, beaucoup plus le nombre de solution à avoir pour en déduire les 724.
J'aimerait bien savoir, a quel point on peu réduire le nombre de solutions a trouver, pour avoir toutes les solution.

Voici la liste des 724 solution à ce problème :

0257948136
0258693147
0258693174
0286931475
0358297146
0369184275
0369281475
0369581427
0369714258
0369724815
0369741825
0384792516
0386192574
0386925147
0396824175
0461973825
0469318257
0471692853
0479261358
0479631852
0495813627
0536928147
0536971428
0538629147
0539682417
0571682493
0572681493
0574182963
0579382461
0582731946
0582963147
0584973162
0586137942
0592683147
0615793824
0635819427
0639714258
0641792853
0647185293
0681592473
0681742953
0682713594
0685297413
0695184273
0716824935
0716924835
0718529364
0736814952
0736815924
0738629514
0741829635
0751693842
0751863924
0752813964
0752814936
0758293641
0796318524
0849731625
0851692473
0852974136
0861379425
0862714953
0946827135
0964718253
1357902468
1372859064
1379485026
1386490572
1396852074
1460958273
1463928570
1468370259
1470692538
1473692058
1475296038
1475820369
1475820639
1479258036
1480936275
1483975206
1497036258
1526908473
1526974038
1529748306
1572084936
1572639084
1580742963
1586902473
1592683047
1642839750
1647039258
1682793504
1693074258
1695084273
1695203748
1728649053
1748059263
1758203649
1792853064
1793048526
1807429635
1827935046
1829630475
1849035726
1850296374
1852930746
1857902463
1862974035
1869304752
1926830475
1963028574
1972480536
2058497316
2417963085
2418596307
2469350817
2470831695
2471860359
2480596137
2481963075
2483097516
2483591607
2483961570
2497316850
2519084736
2539084716
2570369184
2574039681
2579084136
2579304186
2580369147
2580369714
2580731649
2580946137
2581369704
2581369740
2581703649
2584703169
2586031479
2586137049
2586307149
2594186307
2594186370
2596137048
2613794850
2617509483
2619753804
2683049157
2683509147
2693804175
2716094853
2736814059
2750814639
2750946831
2751840396
2751940386
2758094613
2758140369
2790514683
2793804615
2817469053
2819460357
2857130649
2859160374
2918530746
2936815704
2938046157
2951840736
2951863704
2961307485
2963041857
2963185047
2964085713
2968041753
2970415863
2971386405
2974130685
3047926815
3068174295
3069518427
3075196824
3079152864
3147925860
3148097526
3164908572
3168520974
3169508427
3172864905
3174805926
3175804692
3179025864
3179625804
3184975206
3185297046
3185960247
3195847026
3508627149
3509468271
3509647182
3528174690
3529168074
3529607418
3529641807
3571408692
3579162084
3579168024
3582071469
3582961740
3582971460
3584902716
3584906172
3592074186
3592471860
3594172680
3594602718
3605197248
3605817429
3625190847
3629508471
3629518407
3642097581
3649157208
3681470295
3681502479
3685140792
3685190247
3685207419
3691470258
3692470815
3692470851
3692814750
3704815926
3704915286
3708146925
3708516924
3724690518
3724805916
3724805961
3724815960
3724908516
3728590641
3728690514
3741596028
3741906825
3742091586
3742096851
3742951860
3742961580
3748091526
3748096251
3792514086
3794150268
3804915726
3825190647
3827905146
3829164075
3841905726
3842096157
3847025169
3849057162
3862051497
3864150972
3908526174
3925817460
3941862750
3942861750
3961520748
3964170285
3974205186
3974206158
4038619257
4053972861
4073681592
4075186392
4075281396
4079258136
4079631852
4083579162
4085269713
4138279605
4139680275
4139685207
4150968273
4152968307
4159268370
4179285306
4179620835
4179630852
4180279635
4196302857
4208619753
4209683175
4258136970
4258170369
4258603179
4259613708
4259630718
4273609158
4275180369
4279130685
4283179605
4283975160
4285713069
4285916037
4286130975
4286915703
4293681570
4295186370
4295380716
4296158073
4296308157
4603582971
4605713829
4609582731
4615703829
4619703825
4619730285
4630279185
4630718529
4630752918
4639258170
4680279135
4682519703
4682713509
4682730915
4683179205
4685209713
4693182570
4695207318
4702586931
4703581926
4708619253
4713908526
4713968520
4716208359
4716258093
4716920835
4718520369
4730286915
4730619582
4736920581
4738620519
4750268319
4752916830
4758203691
4790258613
4802619753
4803179625
4809362751
4809627135
4813702596
4815720369
4819257036
4819630752
4835916027
4905317286
4930271685
4930286175
4938271605
4953168207
4953172860
4970286135
5029713864
5046827139
5046831792
5061728394
5069713824
5069728314
5094682713
5164083972
5180369247
5180742963
5184279630
5186297403
5190372864
5190637248
5196820374
5197380246
5209741386
5241796308
5247083169
5249731680
5261379480
5263079418
5269380417
5269713084
5281479630
5283079164
5283741906
5283791640
5286031479
5286091473
5291380746
5296418073
5297413068
5304792681
5306817429
5314790286
5316820794
5317269084
5317286490
5317480296
5319720864
5360741829
5369247081
5369281470
5369720814
5380269714
5380296174
5384296170
5390417268
5394286170
5396417028
5703691842
5703841926
5704619283
5704813629
5706318429
5713084296
5713869024
5714083962
5714286930
5716024839
5716820394
5720869314
5724819630
5726390841
5740369281
5740386291
5741396820
5741829630
5741863029
5790316824
5791380246
5803697142
5819720364
5820369147
5820379164
5820714693
5840731629
5847031692
5849031726
5860314792
5860319724
5861720394
5914730286
5916420837
5920368147
5920741863
5924718603
5924813607
5926318407
5946027138
5961380742
6025793841
6025794813
6035829714
6038479251
6057138249
6058137249
6074182539
6091473825
6135849027
6137948502
6150942837
6152974830
6157903842
6158094273
6170835924
6172094853
6174809352
6195084273
6205849731
6207485913
6251903748
6251908473
6257038419
6257048139
6257903148
6257908413
6258093174
6258403971
6271309485
6271409358
6275091483
6275184039
6275194038
6275194083
6275309481
6291483075
6291853074
6295084713
6295184073
6307185249
6307529148
6307529184
6308529741
6314792580
6314809752
6314859207
6318497520
6318529704
6350842791
6357902418
6370481592
6370491528
6374809152
6394182570
6394802751
6405397281
6405827319
6407528139
6407925813
6415093827
6415097283
6417028539
6417038259
6417928530
6420831975
6420837915
6428591307
6470358192
6470392581
6470831925
6471825309
6490352817
6490531728
6491372850
6804152973
6814039752
6814702953
6815024793
6820374195
6820974135
6824195307
6825194073
6827135094
6830491572
6831479025
6835091427
6851902473
6852074139
6920847135
6924803175
6930481572
6931825704
6952073184
7025869314
7028613594
7029584136
7031958246
7035914286
7036814952
7036958142
7038692514
7048136295
7048159263
7061953842
7063184295
7081469253
7140839625
7142869350
7180539642
7182530946
7206195384
7209485316
7241859630
7241905386
7248059613
7248159603
7249053168
7249185360
7263185940
7283905146
7306195824
7316490852
7316950842
7380246195
7382490516
7386205149
7403862951
7405813629
7405813692
7413692850
7413862950
7413968520
7415296830
7418296350
7418630259
7418630295
7419053862
7419268350
7419630285
7419630852
7420695813
7420915863
7425960318
7429630815
7460915283
7480915263
7502683149
7516038429
7516408392
7516902483
7518036924
7519403862
7528139640
7529168304
7530649182
7581403692
7582036914
7941502683
8027519463
8036971425
8073169524
8130695247
8137025964
8142097536
8147069253
8149703625
8150964273
8170369524
8172064953
8192570364
8206951473
8207146935
8241796350
8251940736
8271350946
8304796251
8304915726
8306925741
8317206495
8352960741
8357160249
8407316952
8413097526
8419257036
8427360915
8427915063
8470251693
8473025961
8473091526
8502963741
8516024793
8519063724
8520741963
8524179360
8524179630
8524703961
8526307941
8529307461
8531629740
8536071429
8539041726
8603147925
8613509427
8620514973
8627140935
8642097531
9035281746
9053172864
9137285046
9138620574
9147025863
9148307526
9150268374
9203681475
9241706358
9247185063
9247186035
9248136075
9248306157
9258170364
9261370485
9263184075
9263185047
9281470635
9283075164
9283175064
9304815726
9314702586
9317286405
9318257046
9318407526
9352814706
9358207146
9360285741
9364180572
9384206175
9407316852
9413862057
9415026837
9417036852
9417268053
9420617538
9425817036
9427318506
9428317506
9460317582
9461370852
9463028571
9463071852
9504186372
9520368147
9520738641
9528307146
9530681742
9538026174
9603175824
9613074852
9613807425
9615207483
9630258174
9630275184
9630285741
9630418572
9630718524
9630815724
9641702853
9713068524
9741306825
9741306852
9742051863

#2 26-02-2022 10:36:41

Saule
Invité

Re : Le problème des n dames optimitation

Le code C en question :


#include <unistd.h>

void  ft_putchar(char c)
{
  write(1, &c, 1);
}

//i - ligne = colone (le i % 10 peut etre un equivalent)
//nombre max de diago gauche = colone
//nombre max de diago droite = 9 - colone
//nombre max de deplacement bas = 9 - ligne / 10

void  push_pull_queens(int *tab, int i, int ligne, int state)
{
  int x;
  int t;

  x = 0;
  t = i + 10;
  while (++x <= 9 - ligne / 10)
  {
    tab[t] += (2 * state);
    t += 10;
  }
  x = 0;
  t = i + 9;
  while (++x <= i - ligne && x <= 9 - ligne / 10)
  {
    tab[t] += (2 * state);
    t += 9;
  }
  x = 0;
  t = i + 11;
  while (++x <= 9 - (i - ligne) && x <= 9 - ligne / 10)
  {
    tab[t] += (2 * state);
    t += 11;
  }
}

void  result_print(int *tab, int *res)
{
  int q;

  q = 0;
  while (q < 100)
  {
    if (tab[q] == 1)
      ft_putchar(q % 10 + '0');
    q++;
  }
  ft_putchar('\n');
  q = 0;
  while (q < 100)
  {
    if (tab[q] == 1)
      ft_putchar(9 - q % 10 + '0');
    q++;
  }
  ft_putchar('\n');
  (*res) += 2;
  return ;
}

void  solve(int *tab, int *res, int q, int ligne)
{
  int i;

  if (q == 10)
  {
    result_print(tab, res);
    return ;
  }
  i = ligne;
  while (i < ligne + 10)
  {
    if (tab[i] == 0)
    {
      tab[i] = 1;
      push_pull_queens(tab, i, ligne, 1);
      solve(tab, res, q + 1, ligne + 10);
      push_pull_queens(tab, i, ligne, -1);
      tab[i] = 0;
    }
    i++;
  }
  return ;
}

int ft_ten_queens_puzzle(void)
{
  int tab[100];
  int res;
  int i;

  i = 0;
  res = 0;
  while (i < 100)
  {
    if (i > 4 && i < 10)
      tab[i++] = 2;
    else
      tab[i++] = 0;
  }
  solve(tab, &res, 0, 0);
  return (res);
}
 

#3 26-02-2022 10:54:59

Bernard-maths
Membre
Lieu : 34790 Grabels
Inscription : 18-12-2020
Messages : 1 444

Re : Le problème des n dames optimitation

Bonjour !

J'imagine que les chiffres 0 à 9 désignent ... par ex 0257948136 : ligne 0, colonne 0 ; ligne 2, colonne 2 ; ligne 3, colonne 5 ; ligne 4, colonne 7 ; etc ... ?


Cela me rappelle une fois où on me demandait comment faire une grille de Sudoku ... Plutôt que de faire ça, qui est difficile, j'ai proposé de "tricher" en modifiant une grille donnée !

Par permutation, décalage, symétrie, rotation ... il est possible de fabriquer quelques millions de grilles, apparement différentes !


Peut-être peux-tu chercher dans ce genre de combine ...

Bernard-maths

Dernière modification par Bernard-maths (26-02-2022 10:56:37)


Ma philosophie est immuable : l'immobilisme tue ...
Les Anciens ont trouvé le plus facile ... il nous reste le plus dur !

Hors ligne

#4 26-02-2022 12:15:51

Saule
Invité

Re : Le problème des n dames optimitation

Bernard-maths a écrit :

J'imagine que les chiffres 0 à 9 désignent ... par ex 0257948136 : ligne 0, colonne 0 ; ligne 2, colonne 2 ; ligne 3, colonne 5 ; ligne 4, colonne 7 ; etc ... ?

Cela me rappelle une fois où on me demandait comment faire une grille de Sudoku ... Plutôt que de faire ça, qui est difficile, j'ai proposé de "tricher" en modifiant une grille donnée !

Par permutation, décalage, symétrie, rotation ... il est possible de fabriquer quelques millions de grilles, apparement différentes !

Peut-être peux-tu chercher dans ce genre de combine ...

Oui, le 0 c'est la ligne 1, c'est juste que je commence a compté a 0.
si on commence a compter a 1 pour 0257948136 ça fait : ligne 1, colonne 1 ; ligne 2, colonne 3 ; ligne 3, colonne 6 ; ligne 4, colonne 8 ;

C'est exactement ça je cherche a trouver toutes les possibilité avec le moins de possibilité possible par permutation/décalage/symétrie/rotation...  ou tout t’autre idée.

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
six plus quatre-vingt dix-sept
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums