Lập trình trò chơi tính điểm quân đôminô trong Pascal

Chủ nhật - 09/08/2020 10:05
Cho 1 quân đôminô trên bàn và một số quân đôminô. Một người chơi một trò chơi sau đây:
- Người đó lần lượt gắn các quân đôminô vào quân đã có sẵn ban đầu.
- Người đó được gọi là thắng cuộc nếu tổng các số điểm của các quân còn lại là nhỏ nhất trong tất cả cách lắp.
- Hãy lập trình để máy chơi được trò chơi trên và luôn thắng cuộc.
■ Hướng dẫn:
- Đây là trò chơi một người, thuật toán chủ yếu là vét cạn các cách đi có thể để tổng số điểm còn lại đạt giá trị nhỏ nhất.
- Ta dùng thủ tục đệ qui Find (trai, phai: byte) để có thể quay lui khi vét cạn.
Thủ tục này thể hiện bằng PASCAL như sau:
{$M65520,0,0}
PROGRAM BAILAM3;
USES CRT;
TYPE Conco=Record
           x,y: Byte;
           co: set of byte;
           End;
VAR i,j,m,1m,1maxphai,1maxtrai,1minphai,lmintrai: Integer;
sigma,max,min: longint;
domino: array[1..100 of conco;
luutrai,luuphai,kqmaxtrai,kqmaxphai,kqmintrai,kqminphai: array[1.. 100] og byte;
          flag: set of byte;
          ch:char;
          tarn: set of byte;
          trai,phai,demtrai,demphai: Byte;
          oknhap: boolean;
PROCEDURE KEU;
BEGIN
      Sound(1305);
      Delay(300);
      Nosound;
END;
PROCEDURE FIND (trai,phai: Byte);
VAR j : integer;
         found: boolean;
BEGIN
         found : = false;
         For j : = 1 to 1m do
               If j in flag then
                  With domino[j] do
                       Begin
                            If (trai in co) then
                                Begin
                                    found : = true;
                                    sigma : = sigma-x-y;
                                    flag: = flag-[j]
                                    demtrai : = demtrai+1;
                                    luutrai[demtrai] : = j;
                                    If (trai=x) then Find(y,phai)
                                    Else Find(x,phai);
                                    demtrai: = demtrai-1;
                                    sigma: = sigma+x+y;
                                    flag: = flag+[j];
                               End;
                               If (phai in co) then
                               Begin
                                     found: = true;
                                     flag : = flag-[j];
                                     sigma: = sigma-x-y;
                                     demphai: = demphai+1;
                                     luuphai[demphai] : = j;
                                     If (phai=x) then find (trai,y);
                                     Else find(trai,x);
                                     demphai : = demphai-1;
                                     sigma : = sigma+x+y;
                                     flag : = flag+[j];
                                End;
                        End;
                  If (not found) then
                  Begin
                       If (sigma>max) then
                       begin
                            max: = sigma;
                            1maxphai : = demphai;
                            1maxtrai : = demtrai
                            kqmaxtrai : = luutrai;
                            kqmaxphai : = luuphai;
                       end;
                       If (sigmacmin) then
                       begin
                           min : = sigma;
                           1minphai : = demphai;
                           1mintrai : = demtrai;
                           kqmintrai : = luutrai
                           kqminphai : = luuphai;
                      end;
                 End;
END;
PROCEDURE XUAT;
BEGIN
      Repeat
           clrscr;
           writeln(’Menu’);
           Writeln(‘1. Xem dap so cau 2');
           Writeln('2. Xem dap so cau 3');
           Writeln('3. quit');
           Repeat
               ch : = readkey;
           Until ch in; [‘1’..’3’]
           Case ch of
               '1' : begin
                    For i : = 1mintrai down to 1 do
                   With domino[kqmintrai[i] do
                    begin
                       write(x',’,y,'->');
                    end;
                    For i : = 1 to 1minphai do
                    With domino[kqminphai[i]] do
                     begin
                         write(x,',',y,'->');
                    end;
                    Gotoxy(where-2,wherey);Writeln(' ');
                    Writeln(‘So diem con lai la',min) ;
                    readln;
               end;
               '2' : begin
                    For i: = 1maxtrai down to 1 do
                    With domino[kqmaxphai[i]] do
                    begin
                        write(x,',',y,’->');
                    end;
                    Gotoxy(where-2,wherey);Writeln(' ');
                    Writeln(‘So diem con lai la',max);
                    readln;
                    end;
               end;
          Until ch=’3';
END;
PROCEDURE DOING;
BEGIN
      clrscr;
      Writeln(Nhap vao cap i0 j0');
      Readln(trai phai);
      If (((trai-m)*(trai)>0) or ((phai-m)*(phai)>0)) then
      begin
          keu;
              Writeln(‘Nhap bay ba');
              Readin;
              exit;
       end;
       tam : = [trai,phai];
       i: = 0;
       Repeat
            i : = i + 1;
       Until (domino[i].co=tam);
       demphai : = 1;
       demtrai : = 0;
       flag : = flag-[i];
       luuphai[1]: = i;
       sigma: = sigma-domino[i].x-domino[i].y;
       Writeln(‘Wait me a few minutes long’);
       max : = 0;
      min : = 2147483647;
      Find(trai,phai);
      xuat;
      readln
END;
PROCEDURE NHAP;
VAR s : string;
         error : integer;
BEGIN
        Writeln(‘Nhap m');
        Readln(s);
       Val(s,m,error);
        If (error< >0) then
        begin
             Writeln(‘Kieu so sai.Nhap lai');
             Readin;
             exit;
         end;
         Writeln(‘Cong thuc tinh so hinh chu nhat la To hop C(m+1), 2+m+1=(m+1)*(m+2)/2');
         1m : = (m+1)*(m+2) div 2;
         Writeln(‘Va so do bang',1m);
         oknhap : = true;
         flag : = [1..1m];
         1m : = 0;
         sigma : = 0;
         For i : = 0 to m do
             For j : = i to m do
                 begin
                     1m: = lin+1;
                     sigma: = sigma+i+j;
                     domino[1m].x : = i;
                     domino[1m].y: = j;
                     domino[1m].co: = [i,j];
                 end;
          Oknhap : = true;
          readln;
END;
BEGIN
      oknhap : = false;
      Repeat
      clrscr;
      writeln(’Menu’);
      Writeln(1. Cau 1');
      Writeln('2. Can 2 & 3');
      Writeln('3. quit');
      Repeat
          ch: = readkey;
      Until ch in ['1'..'3'];
      Case ch of
           '1' : Nhap;
           '2' : If oknhap then Doing
                Else.
                keu;
           end;
      Until ch='3';
END.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí ⇔ Kênh 90Phut TV full HD ⇔ 888new ⇔ HM88 ⇔ F168 ⇔ 123b ⇔ 566 ⇔ Vmax ⇔ 78Win ⇔ https://xn88.bio/ ⇔ GK88 ⇔ SHBET ⇔ 78win ⇔ u888 ⇔ 66b ⇔ fo88vic88 ⇔ u888 ⇔ 888p ⇔ BL555 ⇔ 99OK ⇔ f168 ⇔ Link MB66 ⇔ mv66af88 ⇔ 8x bet ⇔ 789BET ⇔ LC88 ⇔ 789f ⇔ 999slot ⇔ 789F ⇔ MB66 ⇔ 8xbet ⇔ https://789betcom0.com/ ⇔ https://hi88.baby/ ⇔ 789BET ⇔ au88 ⇔ go8 zo88 ⇔ ev99 ⇔ go88 ⇔ cm88 ⇔ 88aa ⇔ Kkwin ⇔ tv88 ⇔ 89bet ⇔ mb66.racing ⇔ 88go ⇔ 88xx ⇔ 188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8 ⇔ 99ok ⇔ iwinclub ⇔ vn88 ⇔ 69vn ⇔ m88 ⇔ 56win ⇔ RWIN ⇔ 888new ⇔ BL555 ⇔ hi88 ⇔ https://fun88.social/ ⇔ thabet ⇔ https://vnalo789c.com/ ⇔ https://qq88.fun/888New daga ⇔ SHBET ⇔ keo nha cai https://bshbet.com/ ⇔ https://uk88.rocks ⇔ kkwin ⇔ KUWIN ⇔ RR88 ⇔ 188v 78win ⇔ https://hello8880.net/ ⇔ mb 66 ⇔ TV88 ⇔ NOHU ⇔ 77ball ek333 ⇔ xoso66 X88 ⇔ 78win ⇔ Jun88 ⇔ uu88 ⇔ tt88 ⇔ 88i ⇔ KINGFUN ⇔ https://789club24.com/ ⇔ https://98winlive.com/ ⇔ Game bài đổi thưởng ⇔ https://bet88yk.com/ ⇔ https://alo789apk.app/ ⇔ https://33win100.com/ ⇔ https://u888ny.com/ ⇔ alo789 ⇔ OK8386 ⇔ x88 ⇔ SHBET ⇔ https://hi88.voyage/ ⇔ https://79kings.blue/ ⇔ https://dom88.jp.net/ ⇔ https://hello880.net/ ⇔ https://789club60.com/ ⇔ https://blc88.net/ ⇔ 23win ⇔ uu88 ⇔ xoso66 ⇔ bomwin ⇔ nhatvip ⇔ https://789club24.com/ ⇔ 789 bet ⇔ dola789 ⇔ 8xbet XX88 ⇔ 69vn ⇔ rr88 ⇔ rr88 ⇔ Uu88 ⇔ win456 ⇔ Tài xỉu online ⇔ XN88 ⇔ https://33win101.com/ ⇔ Slot365 ⇔ 78wind.com ⇔ bet88 ⇔ XX88 ⇔ VN88 ⇔ 789BET ⇔ OKFUN hitclub ⇔ Kkwin ⇔ VankhanhTV ⇔ XN88 ⇔ 3WIN ⇔ WIN678 ⇔ KUWIN ⇔ 58WIN ⇔ 68 game bài ⇔ https://taixiu88.pro/ ⇔ 888new.lol ⇔ OK9 ⇔ K8CC ⇔ https://hi88o.com/ ⇔ https://hi88.gives/ ⇔ 68 game bài ⇔ https://shbetk.net/ https://mm88.us.com/ ⇔ 79king ⇔ ww88 ⇔ https://78win.bot/ https://lc88o.com/ ⇔ https://hi88.uno/ ⇔ https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn ⇔ Slot365 ⇔ alo88 ⇔ UU88 888TO ⇔ wstar77 ⇔ 73bet ⇔ 888b ⇔ 11uu ⇔ 78win ⇔ Slot365 ⇔ mv88 ⇔ 789f ⇔ Bsport ⇔ 888New ⇔ EV99 ⇔ u88 ⇔ sunwin ⇔ tỷ lệ kèo nhà cái hôm nay ⇔ BIN88 ⇔ https://f8bet0.world ⇔ https://qq88.studio/ ⇔ https://nh8811.com/ ⇔ Leo88 ⇔ 78win ⇔ EV99 ⇔ 3win ⇔ https://cakhiatv88.net/ hi88 ⇔ 888To ⇔ 789pu.comhi88 ⇔ au88 ⇔ bet88 ⇔ 555WIN ⇔ https://f168hi.com/ ⇔ sv66ax88 ⇔ 88clb https://32win.vc/ ⇔ PG88 ⇔ PG88 ⇔ EE88 ⇔ QQ88 ⇔ Vin777 ⇔ SV388 ⇔ 23WIN ⇔ https://vankhanhtvv.com/ ⇔ Nhà Cái LC88 ⇔ https://sv66.coupons/ ⇔ https://f168.tech/ ⇔ https://8kbetbh.com/ ⇔ https://bong99.onl/ mv88 ⇔ https://rr88.com.se/ ⇔ https://bet168.com.co/ ⇔ https://8kbet.co/ ⇔ https://sunwinn.deal/ ⇔ https://bong88vn.wiki/ ⇔ SHBET ⇔ https://shbet.racing/ ⇔ RR99 ⇔ U888 ⇔ OK8386 ⇔ Mv88 ⇔ MM88 ⇔ 33win ⇔ BL555 ⇔ 69vn ⇔ hi88com ⇔ https://w88link1.com/ ⇔ xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa ⇔ KJC ⇔ Go8 ⇔ thabet ⇔ BET88 ⇔ 58Win ⇔ 69VN ⇔ 789win ⇔ 89bet ⇔ 6ff ⇔ https://luck8.ph/ ⇔ 888slot ⇔ 566 ⇔ https://qq88.co.com/ ⇔ https://j888.us.com/ ⇔ hm88 ⇔ ww88 ⇔ 789WIN ⇔ W88 ⇔ UU88 ⇔ Lc 88 ⇔ TD88 ⇔ https://nohu90i.net/ ⇔ 78Win ⇔ 33win ⇔ https://okwins.vip/ ⇔ 122bet ⇔ 881bet ⇔ xoilac xin ⇔ e2bet ⇔ F168 ⇔ https://go8d.com/ ⇔ luck8 ⇔ https://x88casino.net/ ⇔ sunwin ⇔ https://kjc.events/ ⇔ https://fun88link0.com/ ⇔ https://fun88link1.com/ ⇔ https://188betlink0.com/ ⇔ https://188betlink1.com/ ⇔ https://188betlink2.com/ ⇔ https://w88link0.com/ ⇔ thabet ⇔ 888P ⇔ 11UU ⇔ EV88 ⇔ 789F ⇔ 69vn77win ⇔ xx88 ⇔ 78win ⇔ https://okfun.bz/ ⇔ https://daga88.beer/ ⇔ QQ88 ⇔ https://i9betz4.com/ ⇔ Kuwin ⇔ w88link2.com ⇔ w88link3.com ⇔ 32WIN ⇔ https://8dayvip.mobi/ ⇔ https://8dayvip.com/ ⇔ 86bet ⇔ t88 ⇔ af88 ⇔ U888 ⇔ 86bet ⇔ https://pg99yk.com/ ⇔ https://u888wl.com/ ⇔ kingfun ⇔ 888new ⇔ 88AA ⇔ GK88 ⇔ https://78wincom.net/ ⇔ GO99 ⇔ BET88 ⇔ 99win ⇔ TT88 ⇔ https://8kbettt.com/ ⇔ https://86bet.tech/ ⇔ https://789betca.com/ ⇔ https://fly88.gifts/ ⇔ lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88 ⇔ tv88 ⇔ 88vv ⇔ KWIN ⇔ tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win SV388 ⇔ SHBET MAX79 ⇔ HM88 ⇔ TV88 ⇔ https://bet88.ventures/ zx88 ⇔ ev99 https://f168.name/ ⇔ https://kjc.ac/ ⇔ link vn88 ⇔ HZ88 ⇔ http://58win.trading/ ⇔ https://qq88.gives/ ⇔ bong88 ⇔ sky88 ⇔ Cổng game rikvip ⇔ ev99 ⇔ 79KING ⇔ Bet88 ⇔ XN88 ⇔ i9bet ⇔ VN23 ⇔ https://kkwin.fan/ ⇔ https://555win.bike/ ⇔ https://f8bet.courses/ ⇔ https://go8play.com/ ⇔ https://lc88.bar/ ⇔ 789f ⇔ abc8 ⇔ good88 ⇔ 789win ⇔ Hitclub ⇔ https://f8bet80.one/ ⇔ lương sơn tv ⇔ vwin ⇔ sut88 ⇔ vua88 ⇔ hb88 ⇔ https://okfun.center/ ⇔ 68win ⇔ LC88 ⇔ 79king ⇔ https://hi88.tours/ ⇔ https://ok9.charity/ ⇔ https://kkwin68.info/ ⇔ https://ee88com.me/ ⇔ https://new88blog.org ⇔ nổ hũ ⇔ https://uu88vn.com ⇔ nhà cái LC88 ⇔ nohu ⇔ lc88 com ⇔ 69VN ⇔ Ok365 ⇔ 6FF ⇔ Nohu90 ⇔ go8 ⇔ 22vip ⇔ af88 ⇔ 86bet ⇔ five88 ⇔ 68win ⇔ 11uu ⇔ https://go8.beer/ ⇔ đánh bài tiến lên ⇔ sin88 ⇔ 9win ⇔ 88i ⇔ https://u888.ac/ ⇔ https://king88com.uk.net/ ⇔ https://shbet.gg/ ⇔ LC88 ⇔ OKKING ⇔ 13win ⇔ https://88fc0.com/ ⇔ abc8 ⇔ U888 ⇔ https://s666.garden ⇔ https://fly88.select/ ⇔ https://bk8co.net/ ⇔ bet88 ⇔ F168 ⇔ https://qq8876.net/ ⇔ hi88s com ⇔ f168 ⇔ https://88xx.mobi/ ⇔ bet88 ⇔ 88clb ⇔ GO8 ⇔ https://qq88.social/ ⇔ LC88 ⇔ https://j88vm.com/ ⇔ https://78winvina.com/ ⇔ https://luongson161.tv/ ⇔ https://okfun.cfd/ ⇔ https://keonhacai.deals/ ⇔ https://j88com.today/ ⇔ 28bet ⇔ MB66 ⇔ https://mk8th.net/ ⇔ https://58win.faith/ ⇔ Jun88 ⇔ 188v ⇔ https://s8.surf/ ⇔ https://jun88.school/ ⇔ https://qq887p.com/ ⇔ https://hi88.biz/ ⇔ https://mk8.ac/ ⇔ 78win ⇔ motphimchill ⇔ SHBET ⇔ x88 ⇔ https://mb668.co/ ⇔ https://f168.law/ ⇔ https://saobet.shop/ ⇔ win678 ⇔ https://8kbetnh.com/ ⇔ https://j8kbet.com/ ⇔ 33win ⇔ https://xx88tv.com/ ⇔ i9 Bet ⇔ kèo nhà cái ⇔ S666 ⇔ BL555 ⇔ max79 ⇔ bl-555.site ⇔ https://8scom.dev/ ⇔ https://f168.studio/ ⇔ au88 ⇔ lc88 ⇔ https://tp88.help/ ⇔ 8kbet ⇔ TT88 ⇔ ev99 ⇔ vn168 ⇔ U888 ⇔ okking ⇔ j88 ⇔ https://32win.football/ ⇔ 789P ⇔ 28bet ⇔ 32 win ⇔ https://nohu.com.mx/ ⇔ https://789fnew.com/ ⇔ xin88 ⇔ 88GO ⇔ tv88 ⇔ LC88 ⇔ https://five88.meme/ ⇔ https://13win.vegas/
 ⇔ S8 ⇔ 32win ⇔ Kuwin ⇔ https://hitclubhq.com/ ⇔ au88 ⇔ au88 ⇔ go99 ⇔ fc88 ⇔ https://qq88.media/ ⇔ 888vi ⇔ https://keonhacai1.us.com/ ⇔ 68 game bài ⇔ tt88 ⇔ mn88 ⇔ https://789winst.com/ ⇔ BL555 ⇔ HM88 ⇔ LC88 ⇔ QQ88 ⇔ mb66 ⇔ 88AA ⇔ aalo789 ⇔ PG99 ⇔ PG88 ⇔ QQ88 ⇔ https://s888.baby/ ⇔ 100vip ⇔ E2bet ⇔ F168 ⇔ 99ok ⇔ 888P ⇔ 8xbet ⇔ rr88 ⇔ https://jun88.black/ ⇔ x88 ⇔ Nhà Cái LC88 ⇔ sv66 ⇔ 789win ⇔ 161bet ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây