01/10/2018, 09:59
Chương trình 8 hoàng hậu
Tiếp từ topic này Chương trình minh họa giải thuật Dijkstra tìm đường đi ngắn nhất
/*****************************************************************************
* Chuong trinh C1-4: Chuong trinh 8 hoang hau *
* Nguoi viet chuong trinh: Nguyen Hong Chuong *
* Ngay cap nhat moi nhat: 15/3/1999 *
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define KICHTHUOC 8 // Kich thuoc cua ban co
#define SODUONGCHEO (2*KICHTHUOC-1) // So duong cheo cua ban co
#define SOGIA (KICHTHUOC-1) // so gia
#define TRUE 1
#define FALSE 0
// prototypes
void hoanghau(int);
void inloigiai(int loigiai[]);
int cottrong[KICHTHUOC]; // mang cac cot co the dat hoang hau
int cheoxuoitrong[SODUONGCHEO]; // mang cac duong cheo xuoi co the dat hhau
int cheonguoctrong[SODUONGCHEO]; // mang cac duong cheo nguoc co the dat hhau
int loigiai[KICHTHUOC]; /* mang loigiai cho biet cot dat cac hoang
hau tren ban co. Vi du cac phan tu cua mang
la: 7 3 0 2 5 1 6 4
cho biet hoanghau0 dat o cot 7, hoanghau1
dat o cot 3, ..., hoanghau7 o cot 4 */
int SoLoiGiai = 0;
void main(void)
{
int i;
/* Khoi dong tat ca cac cot duong cheo xuoi, duong cheo nguoc deu co the
dat hoang hau */
for(i = 0; i < KICHTHUOC; i++)
cottrong[i] = TRUE;
for(i = 0; i < SODUONGCHEO; i++)
{
cheoxuoitrong[i] = TRUE;
cheonguoctrong[i] = TRUE;
}
// Goi ham de qui de bat dau dat HoangHau0 (hoang hau o hang 0)
hoanghau(0);
}
// Ham hoanghau giup dat hoang hau i (i tu 0 den KICHTHUOC-1) tren hang i
void hoanghau(int i)
{
int j;
for(j = 0; j < KICHTHUOC; j++)
if(cottrong[j] && cheoxuoitrong[i-j+SOGIA] && cheonguoctrong[i+j])
{
// Dat hoang hau vao o (i, j) tren ban co
loigiai[i] = j;
cottrong[j] = FALSE;
cheoxuoitrong[i-j+SOGIA] = FALSE;
cheonguoctrong[i+j] = FALSE;
if(i == KICHTHUOC-1) // Dkien dung, dat duoc con hoang hau cuoi
inloigiai(loigiai);
else // Buoc de qui, goi dat hoang hau i+1
hoanghau(i + 1);
// lan nguoc
cottrong[j] = TRUE;
cheoxuoitrong[i-j+SOGIA] = TRUE;
cheonguoctrong[i+j] = TRUE;
}
}
void inloigiai(int *loigiai)
{
int i, j;
char c;
randomize();
textmode(C80);
textbackground(BLACK);
clrscr();
textcolor(1 + random(15));
cprintf("
CHUONG TRINH 8 HOANG HAU
");
cprintf("
Loi giai %d", ++SoLoiGiai);
printf("
0 1 2 3 4 5 6 7");
printf("
ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄ¿");
printf("
0³ ³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
1³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³ ³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
2³ ³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
3³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³ ³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
4³ ³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
5³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³ ³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
6³ ³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³");
printf("
ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´");
printf("
7³²²²²³ ³²²²²³ ³²²²²³ ³²²²²³ ³");
printf("
ÀÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÙ");
for(i = 0; i < KICHTHUOC; i++)
{
gotoxy(24+5*loigiai[i], 8+2*i);
textcolor(1 + random(15));
cprintf("Q");
}
gotoxy(13, 25);
printf("Nhan phim <ESC> de thoat, nhan phim bat ky de tiep tuc ...");
c = getche();
if(c == 27)
exit(1);
}
Bài liên quan
Thiết nghĩ cũng cần lắm một “thư viện” code trên github cho anh em xem tham khảo nhỉ? Chứ lâu lâu rải một bài thì qua hôm sau lại chìm vào quên lãng :))