begin process at 2012 05 27 17:53:01
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > PROBLÈME DES 8 REINES GÉNÉRALISÉ

PROBLÈME DES 8 REINES GÉNÉRALISÉ


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Initié Date de création :09/07/2005 Vu / téléchargé :8 948 / 380

Auteur : Abdellah81

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Ce code résoud le prob des huit reines d'une manière récursive, en utilisant deux 03 tableau
un pour marquer les colonnes, et les deux autres pour la diagonale gauche et droite.
Et ca en remarquant que les éléments de la diagonale gauche sont relié par la relation (ligne + colonne), et les éléments de la diagonale droite par la relation (N + (ligne - colonne)).

Source

  • #include<dos.h>
  • #include<bios.h>
  • #include<stdlib.h>
  • #include<stdio.h>
  • #include<conio.h>
  • #include<graphics.h>
  • #define MAX_CASE 20
  • int vitesse = 1000;
  • int queen[(MAX_CASE-1)+1];
  • int col[(MAX_CASE-1)+1];
  • int dp[2*(MAX_CASE-1)+1];
  • int dn[2*(MAX_CASE-1)+1];
  • int n;
  • int nbr_sol;
  • int x = 10, y = 10;
  • char str[20];
  • void dessiner_reine(int, int);
  • void graphisme(int );
  • void placer(int);
  • void mettre(int, int);
  • void effacer(int, int);
  • int libre(int, int);
  • void dessiner(void);
  • void init(void);
  • int main()
  • {
  • clrscr();
  • printf("Entrez le nombre de reines:");
  • scanf("%d", &n);
  • init();
  • graphisme(n);
  • placer(n-1);
  • sprintf(str,"%d",nbr_sol);
  • outtextxy(x+n*30+10,y+n*30+10,str);
  • getch();
  • return 0;
  • }
  • void placer(int l)
  • {
  • int c;
  • for(c=0;c<n;c++)
  • if(libre(l,c))
  • { if(bioskey(2) == 27) exit(1);
  • mettre(l,c);
  • if(l==0) dessiner();
  • else placer(l-1);
  • effacer(l,c);
  • }
  • }
  • void mettre(int l, int c)
  • {
  • queen[l]=c;
  • col[c]=-1;
  • dp[l+c]=-1;
  • dn[l-c+n-1]=-1;
  • }
  • void effacer(int l, int c)
  • {
  • col[c]=0;
  • dp[l+c]=0;
  • dn[l-c+n-1]=0;
  • }
  • int libre(int l, int c)
  • {
  • return((!col[c]) && (!dp[l+c]) && (!dn[l-c+n-1]));
  • }
  • void dessiner()
  • {
  • int r;
  • int c;
  • nbr_sol++;
  • cleardevice();
  • graphisme(n);
  • for(r=n-1;r>=0;r--)
  • {
  • for(c=0;c<n;c++)
  • if(queen[r]==c){dessiner_reine(x+c*30, y +r*30);}
  • }
  • delay(vitesse);
  • }
  • void init()
  • {
  • int grdriver=DETECT, grmode, err;
  • int i;
  • nbr_sol = 0;
  • for(i=0;i<n;i++) col[i]=0;
  • for(i=0;i<2*n-2;i++) dp[i]=0, dn[i]=0;
  • initgraph(&grdriver, &grmode, "c:\\tc\\bgi");
  • }
  • void graphisme(int n)
  • {
  • setcolor(WHITE);
  • setfillstyle(SOLID_FILL, WHITE);
  • for(int i=0; i <= n; i++)
  • line(x+i*30,y,x + i*30,y+n*30);
  • for(i=0; i <= n; i++)
  • line(x, y+i*30, x+n*30, y+ i*30);
  • for(i=0; i<n; i=i+1)
  • for(int j=i%2; j<n; j = j+2)
  • floodfill(x+j*30+1, y+30*i+1,15);
  • }
  • void dessiner_reine(int x, int y)
  • {
  • setcolor(RED);
  • setfillstyle(SOLID_FILL, RED);
  • circle(x+16, y+16, 5);
  • floodfill(x+16,y+16,RED);
  • }
#include<dos.h>
#include<bios.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#define MAX_CASE 20

int vitesse = 1000;
int queen[(MAX_CASE-1)+1];
int col[(MAX_CASE-1)+1];
int dp[2*(MAX_CASE-1)+1];
int dn[2*(MAX_CASE-1)+1];
int n;
int nbr_sol;
int x = 10, y = 10;
char str[20];

void dessiner_reine(int, int);
void graphisme(int );
void placer(int);
void mettre(int, int);
void effacer(int, int);
int libre(int, int);
void dessiner(void);
void init(void);


int main()
{
clrscr();
printf("Entrez le nombre de reines:");
scanf("%d", &n);
init();
graphisme(n);
placer(n-1);
sprintf(str,"%d",nbr_sol);
outtextxy(x+n*30+10,y+n*30+10,str);
getch();
return 0;
}



void placer(int l)
{
   int c;
   for(c=0;c<n;c++)
      if(libre(l,c))
      { if(bioskey(2) == 27) exit(1);
	 mettre(l,c);
	 if(l==0) dessiner();
	 else placer(l-1);
	 effacer(l,c);
      }
}


void mettre(int l, int c)
{
   queen[l]=c;
   col[c]=-1;
   dp[l+c]=-1;
   dn[l-c+n-1]=-1;
}

void effacer(int l, int c)
{
   col[c]=0;
   dp[l+c]=0;
   dn[l-c+n-1]=0;
}

int libre(int l, int c)
{
   return((!col[c]) && (!dp[l+c]) && (!dn[l-c+n-1]));
}

void dessiner()
{
   int r;
   int c;
   nbr_sol++;
cleardevice();
graphisme(n);
for(r=n-1;r>=0;r--)
   {
      for(c=0;c<n;c++)
	 if(queen[r]==c){dessiner_reine(x+c*30, y +r*30);}
   }
delay(vitesse);
}


void init()
{
int grdriver=DETECT, grmode, err;

int i;
nbr_sol = 0;
for(i=0;i<n;i++) col[i]=0;
   for(i=0;i<2*n-2;i++) dp[i]=0, dn[i]=0;
initgraph(&grdriver, &grmode, "c:\\tc\\bgi");
}


void graphisme(int n)
{
setcolor(WHITE);
setfillstyle(SOLID_FILL, WHITE);

for(int i=0; i <= n; i++)
   line(x+i*30,y,x + i*30,y+n*30);
for(i=0; i <= n; i++)
    line(x, y+i*30, x+n*30, y+ i*30);
for(i=0; i<n; i=i+1)
   for(int j=i%2; j<n; j = j+2)
      floodfill(x+j*30+1, y+30*i+1,15);
}

void dessiner_reine(int x, int y)
{
setcolor(RED);
setfillstyle(SOLID_FILL, RED);
circle(x+16, y+16, 5);
floodfill(x+16,y+16,RED);
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip TRANSFERT DE FICHIER VIA LE PROTOCOL TCP/IP
Source avec Zip CHEMIN CRITIQUE PAR LA METHODE PERT
Source avec Zip TRANSFERT DE FICHIER VIA SOCKET UDP
SIMPLEX PRIMAL
RECHERCHE DE MOTIF DANS UN TEXTE

 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

Commentaires et avis

Commentaire de vecchio56 le 09/07/2005 09:38:10 administrateur CS

J'ai trouvé aucun compilateur de moins de 10 ans qui compile ca

Commentaire de JCDjcd le 09/07/2005 12:16:37

C'est peut etre du Turbo C, (Borland)

Commentaire de Urgo le 09/07/2005 14:33:11

Turbo C++ 3.0 ça existe encore?

Commentaire de LordBob le 11/07/2005 20:02:56

oui disponible sur le site de Borland gratuitement !
il faut codé autre chose que du 16 bits !!! surtout que on va vers le 64 !!!

Commentaire de Abdellah81 le 27/04/2006 21:19:15

Premierement le language (soit naturel ou de programmtion) est un ensemble de symbole designant des idees; et je crois que ce qui importe est les idees.
Ce programme a ete realise pour des raisons pedagogiques.
La programmation iterative est la meme avec 64 bit 16 bit ou 2 bit?
Si vous n'avez rien a faire vous pouvez le traduire en java ou en c builder.
                 merci
                 Abdellah

 Ajouter un commentaire




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,359 sec (4)

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