Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: sắp xếp 8 con hậu lên bàn cờ sao cho ko khống chế lẫn nhau

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    3

    Mặc định sắp xếp 8 con hậu lên bàn cờ sao cho ko khống chế lẫn nhau

    chỉ giúp em bài sắp xếp 8 con hậu lên bàn cờ sao cho ko khống chế lẫn nhau

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    224

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<dos.h>
    4. #include<graphics.h>
    5.  
    6. int a[8][8];
    7. int hau = 4, an =10;
    8. int width = 60;
    9. int color = 15;
    10.  
    11. void kddh()
    12. {
    13.     int gdriver = DETECT, gmode, errorcode;
    14.     initgraph(&gdriver, &gmode, "C:\\BC31\\BGI");
    15.     errorcode = graphresult();
    16.     if (errorcode != grOk)  /* an error occurred */
    17.     {
    18.         printf("Graphics error: %s\n", grapherrormsg(errorcode));
    19.         printf("Press any key to halt:");
    20.         getch();
    21.         return;
    22.     }
    23. }
    24.  
    25. void xuat1vt(int d,int c)
    26. {
    27.     // setcolor(4);
    28.     if (a[d][c]==1) //ascii = 2
    29.     {
    30.         setfillstyle(1, 10);
    31.         fillellipse (c*width+30, d*width+30, 15, 10);
    32.         //settextstyle(1, HORIZ_DIR, 5);
    33.         //outtextxy(c*width + 10, d*width + 10, "Û");
    34.     }
    35.     else           //ascii = 1
    36.     {
    37.         setfillstyle(1, 4);
    38.         bar(c*width + 10, d*width + 10, c*width+50, d*width+50);
    39.         //settextstyle(1, HORIZ_DIR, 5);
    40.         //outtextxy(c*width + 10, d*width + 10, "N");
    41.     }
    42.     delay(50);
    43. }
    44.  
    45. void antrai(int d,int c)
    46. {
    47.     c--; //di qua trai
    48.     while (c>=0) //bien trai
    49.     if (a[d][c])
    50.         c--;
    51.     else
    52.     {
    53.         a[d][c]=1;
    54.         xuat1vt(d,c--);
    55.         delay(400);
    56.     }
    57. }
    58.  
    59. void anphai(int d,int c)
    60. {
    61.     c++;
    62.     while (c<8) //bien phai
    63.         if (a[d][c])
    64.             c++;
    65.         else
    66.         {
    67.             a[d][c]=1;
    68.             xuat1vt(d,c++);
    69.             delay(400);
    70.         }
    71. }
    72.  
    73. void anxuong(int d,int c)
    74. {
    75.     d++;
    76.     while(d<8)
    77.     if (a[d][c])
    78.         d++;
    79.     else
    80.     {
    81.         a[d][c]=1;
    82.         xuat1vt(d++,c);
    83.         delay(400);
    84.     }
    85. }
    86.  
    87. void ancheo6(int d,int c)
    88. {
    89.     d++;c++;
    90.     while (d<8&&c<8) //trong khi con nam trong ban co
    91.         if (a[d][c])
    92.         {
    93.             c++;
    94.             d++;
    95.             delay(400);
    96.         }
    97.         else
    98.         {
    99.             a[d][c]=1;
    100.             xuat1vt(d++,c++);
    101.             delay(400);
    102.         }
    103. }
    104.  
    105. void ancheo8(int d,int c)
    106. {
    107.     d++;
    108.     c--;
    109.     while (d<8&&c>=0)
    110.     if (a[d][c])
    111.     {
    112.         d++;
    113.         c--;
    114.     }
    115.     else
    116.     {
    117.         a[d][c]=1;
    118.         xuat1vt(d++,c--);
    119.         delay(400);
    120.     }
    121. }
    122.  
    123. void dat1hau(int d,int c)
    124. {
    125.     a[d][c]=2;
    126.     xuat1vt(d,c);
    127.     antrai(d,c);
    128.     anphai(d,c);
    129.     anxuong(d,c);
    130.     ancheo6(d,c);
    131.     ancheo8(d,c);
    132.     delay(400);
    133. }
    134.  
    135. int demcheo8(int d,int c)
    136. {
    137.     int dem=0;
    138.     d++;
    139.     c--;
    140.     while (d<8&&c>=0)
    141.     if (a[d++][c--]==0)
    142.         dem++;
    143.     return dem;
    144. }
    145.  
    146. int demcheo6(int d,int c)
    147. {
    148.     int dem=0;
    149.     d++;
    150.     c++;
    151.     while (d<8&&c<8)
    152.     if (a[d++][c++]==0)
    153.         dem++;
    154.     return dem;
    155. }
    156.  
    157. int demxuong(int d,int c)
    158. {
    159.     int dem=0;
    160.     d++;
    161.     while (d<8)
    162.     if (a[d++][c]==0)
    163.         dem++;
    164.     return dem;
    165. }
    166.  
    167. int dem_otrong(int d,int c)
    168. {
    169.     int dem=0;
    170.     dem+=demxuong(d,c);
    171.     dem+=demcheo6(d,c);
    172.     dem+=demcheo8(d,c);
    173.     return dem;
    174. }
    175.  
    176. int tim_otrong(int d,int c)
    177. {
    178.     while (a[d][c]&&c<8)//bo qua nhung o da dung
    179.         c++;
    180.     return c;    // c mang 2 gia tri 8:khong con trong ban co,
    181.                 // hoac <8:co 1 o trong tai vi tri c
    182. }
    183.  
    184. int timmin(int d)
    185. {
    186.     int min=65;//khoi tao gia tri tim min ->max
    187.     int vtc=8; //vi tri cot min
    188.     int c=0;//vua la vi tri bat dau xet tim o trong, vua la tri tra ve
    189.     while (c<8)
    190.     {
    191.         c = tim_otrong(d,c); //dong dang xet,cot bat dau
    192.         if (c<8)//co it nhat 1 o trong
    193.         {
    194.             int h=dem_otrong(d,c);
    195.             if (h<min)
    196.             {
    197.                 min=h; //cap nhat lai gia tri min
    198.                 vtc=c; //cap nhat lai vi tri min
    199.             }
    200.             c++; //tim o trong ke tiep
    201.         }
    202.     }
    203.     return vtc;
    204. }
    205.  
    206. int tamhau()
    207. {
    208.     dat1hau(0,3);
    209.     dat1hau(1,7);
    210.     dat1hau(2,0);
    211.     for (int d=3;d<8;d++) //dat 5 con hau con lai
    212.     {
    213.         int c=timmin(d); //tim o bang min thi chon
    214.         if (c>=8)
    215.         {
    216.             getch();
    217.             return 0;
    218.         } //khong tim thay o trong nao ca,retrun ve that bai
    219.         dat1hau(d,c); //dat hau vao vi tri vua tim duoc,cot thi tim min
    220.     }
    221.     getch();
    222.     return 1; //thanh cong
    223. }
    224.  
    225. void VeBC()
    226. {
    227.     setcolor(color);
    228.     rectangle(0, 0, width*8-1, width*8-1);
    229.     for (int i=0; i<8; i++)
    230.         for (int j=0; j<8; j++)
    231.             if ( (i%2==0 && j%2==0) || (i%2!=0 && j%2!=0) )
    232.             {
    233.                 setfillstyle(1, color);
    234.                 bar( j*width, i*width, j*width + width, i*width + width);
    235.             }
    236. }
    237.  
    238. void canhan()
    239. {
    240.     rectangle(500,15,630,470);//Vien lon
    241.     rectangle(497,13,633,473);//Vien nho
    242.     rectangle(510,25,620,60);//Ten chuong trinh
    243.     rectangle(510,70,620,240);//Mo ta chuong trinh
    244.     rectangle(510,70,620,90);//
    245.  
    246.     rectangle(510,250,620,400);//Tac gia
    247.     rectangle(510,410,620,460);//Ket qua
    248.     outtextxy(520,420,"Ket qua:");
    249.     setcolor(2);
    250.     settextstyle(2,HORIZ_DIR,5);
    251.     //sprintf(ng,"%d",ngay);
    252.     outtextxy(520,260,"Tac Gia:");
    253.     setcolor(YELLOW);
    254.     outtextxy(520,280,"Anhsuytu");
    255.     setcolor(2);
    256.     //printf("\n");
    257.     outtextxy(520,310,"Lop:");
    258.     setcolor(YELLOW);
    259.     outtextxy(520,330,"C2CT05");setcolor(2);
    260.     outtextxy(520,360,"MSSV:");
    261.     setcolor(YELLOW);
    262.     outtextxy(520,380,"302010259");
    263.     //Ten chuong trinh
    264.     setcolor(RED);
    265.     settextstyle(13,HORIZ_DIR,7);
    266.     //sprintf(ng,"%d",ngay);
    267.     outtextxy(525,35,"BAI TAM HAU");
    268.     setcolor(2);
    269.     settextstyle(13,HORIZ_DIR,3);
    270.     outtextxy(545,80,"MO TA");
    271.     char *s[]={    "Dat mot con","ma tai mot","vi tri bat" ,
    272.                 "ky tren ban","co, di sao  ","cho het ban" ,
    273.                 "co voi dieu ","kien ko duoc","di len o da","di" };
    274.     int x=110;
    275.     for (int k=0;k<=9;k++)
    276.     {
    277.         setcolor(15);
    278.         outtextxy(520,x,s[k]);
    279.         x+=10;
    280.     }
    281. }
    282.  
    283. void  main()
    284. {
    285.     clrscr();
    286.     kddh();
    287.     VeBC();
    288.     canhan();
    289.     int kq=tamhau();
    290.     if (kq)
    291.         outtextxy(520, 435, "Thanh cong"); //kq==1:thanh cong
    292.     else
    293.         outtextxy(520, 435, "Ko thanh cong"); //kq==0:that bai
    294.     getch();
    295. }

    Giải thuật bài toán 8 hậu -sưu tầm .

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    đọc code kiểu này chắc điên mất, bài này mình vẫn chưa giải được đơn giản vì chưa nghĩ ra thuật toán
    bạn có thể tham khảo thêm ở đây, còn hiểu hay ko thì còn tùy mình (thật ra mình vẫn chưa hiểu)
    Code:
    http://forums.congdongcviet.com/showthread.php?t=614&highlight=b%C3%A0i+to%C3%A1n+h%E1%BA%ADu

  4. #4
    Ngày gia nhập
    01 2008
    Bài viết
    3

    các bác nói giùm em ý tưởng bài này di em muon bit về thuât toán

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    224

    ý tưởng thuật toán 8 hậu - wikipedia
    Sory mình có sách giấy nên ko thể post được đành gửi cho bạn link này .

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định sắp xếp 8 con hậu lên bàn cờ sao cho ko khống chế lẫn nhau

    Bài này chủ thực chất có 12 TH thôi, nhưng do hoan vị cột dòng nên nó mới ra nhiều thế. Hi vọng cái này dễ hiểu cho bạn :
    C++ Code:
    1. #include <iostream>
    2. #include <algorithm>
    3.  
    4. int main(){
    5.  
    6.   const int size = 8;
    7.   int _Q[size];
    8.   for(int que = 0; que < size; ++que)
    9.     _Q[que] = que;
    10.   do{
    11.     for(int x = 1 ;x < size ; ++x){
    12.       for( int y = 0 ; y < x; ++y){
    13.         if(abs(_Q[x] - _Q[y]) == (x - y))  
    14.           goto not_a_solution;
    15.       }
    16.     }
    17.     for(int x = 0; x < size; ++x){
    18.       for(int y = 0; y < size ; ++y){  
    19.         std::cout << "_Q"[_Q[x] == y] << ' ';
    20.       }
    21.       std::cout << '\n';
    22.     }
    23.     std::cout << std::endl;
    24.     not_a_solution:;
    25.   }
    26.   while(std::next_permutation(_Q, _Q + size));
    27. }

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    61

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Bài này chủ thực chất có 12 TH thôi, nhưng do hoan vị cột dòng nên nó mới ra nhiều thế. Hi vọng cái này dễ hiểu cho bạn :
    C++ Code:
    1. #include <iostream>
    2. #include <algorithm>
    3.  
    4. int main(){
    5.  
    6.   const int size = 8;
    7.   int _Q[size];
    8.   for(int que = 0; que < size; ++que)
    9.     _Q[que] = que;
    10.   do{
    11.     for(int x = 1 ;x < size ; ++x){
    12.       for( int y = 0 ; y < x; ++y){
    13.         if(abs(_Q[x] - _Q[y]) == (x - y))  
    14.           goto not_a_solution;
    15.       }
    16.     }
    17.     for(int x = 0; x < size; ++x){
    18.       for(int y = 0; y < size ; ++y){  
    19.         std::cout << "_Q"[_Q[x] == y] << ' ';
    20.       }
    21.       std::cout << '\n';
    22.     }
    23.     std::cout << std::endl;
    24.     not_a_solution:;
    25.   }
    26.   while(std::next_permutation(_Q, _Q + size));
    27. }
    Thuật toán bài 8 hậu đây á , ngắn ghê ..........

  8. #8
    Ngày gia nhập
    09 2009
    Bài viết
    1

    Bài này có 92 cách sắp. Thường thì dùng giải thuật đệ quy. Trong pacal thì viết đơn giản lắm. Còn C++ mới học chẳng biết viết thế nào. Tiện đây cho mình hỏi mấy cái trong C++ nhé.
    trong Pacal khai báo như sau :
    a:array[1..100,1..100] of boolean;
    b:array[1..100,1..100] of (0..1);
    khi chuyển sang C++ thì hai mảng trên khai báo thế nào ?
    và trong c++ gán một phần tử bằng âm vô cùng và dương vô cùng thế nào?
    Thank !

Các đề tài tương tự

  1. Ghép 2 DataTable lại với nhau để hiển thị lên gridview
    Gửi bởi dauhoi_8x trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 30-04-2012, 07:51 AM
  2. Trả lời: 10
    Bài viết cuối: 09-06-2011, 11:36 AM
  3. Hiện dữ liệu từ các bảng khác nhau lên dataGridVew như thế nào?
    Gửi bởi phamlam_blue_sky trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 15
    Bài viết cuối: 05-05-2011, 03:40 PM
  4. Kết Quả khác nhau ở những lần chạy khác nhau
    Gửi bởi llvllrSi trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 15-12-2010, 01:26 AM
  5. [VC] Sự khác nhau của complier VC6 và VC7 trở lên
    Gửi bởi nguyentuan2 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 16-11-2006, 11:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn