Skip to content
Narrow screen resolution Wide screen resolution Auto adjust screen size Increase font size Decrease font size Default font size default color grey color
         
 | 
VNOI - Olympic tin học Việt Nam

Điểm tin VOJ

Số thành viên:6040
Số bài tập:1001
Số bài nộp:722923
Bài nộp hôm nay:0

Top 10 thành viên xuất sắc

HạngThành viênĐiểm
1mr_invincible587.9
2white_cobra418.6
3hieult403.4
4phaleq384.0
5vodanh9x368.2
6con_nha_ngheo352.0
7flash_mt350.2
8darksabers349.8
9yenthanh132345.3
10rockman9x_94343.1

Danh tiếng các thành viên

HạngThành viênĐiểm
1mr_invincible+213
2conankudo+149
3khuc_tuan+137
4tuananhnb93+129
5khanhptnk+108
6hphong+103
7flash_mt+99
8paulmcvn+71
9technolt+70
10hoangle+63

Topcoder Vietnam

HạngThành viênĐiểm
Diễn đàn
Forum
Bài toán xếp Hậu không tìm đủ số nghiệm (1 đang xem) ,(1) Khách
Bài viết dưới cùng Gửi trả lời Được ưa thích: 0
CHỦ ĐỀ - Bài toán xếp Hậu không tìm đủ số nghiệm
#70594
sythanh14 (Thành viên)
Đã biết code đệ quy
Bài viết: 6
graphgraph
Thành viên gián tuyến Click vào đây để xem thông tin về thành viên này
Bài toán xếp Hậu không tìm đủ số nghiệm 8 năm trước   (+0)
Các anh ơi, em mới làm quen với thuật toán quay lui, và đang xử lý bài toán xếp Hậu, em đã đọc kỹ thuật toán và code lại vào FPC nhưng chỉ tìm được 6 nghiệm, (bài toán với bàn cờ 8x8), trong khi kết quả của bài toán là 92 nghiệm, đây là code của nó, các anh giúp em tìm lỗi sai với ạ, em xin cảm ơn.
Code:
(*=================================================
                        N Hau
=================================================*)
{$B-}
uses crt;
const
     MN = 20;
     gn = 'N_HAU.OUT';
     BL = #32;   {dau cach}
var
     v: array[0..MN] of byte;
     n: byte;   {so quan hau, kich thuoc ban co}
     g: text;   {tep ket qua}
(*-------------------------------------------------
        Kiem tra xem co dat duoc Hau i
        tai o (v[i],i) cua ban co khong?
-------------------------------------------------*)
function DatDuoc(i: byte): Boolean;
var j: byte;
begin
     DatDuoc := false;
     for j := 1 to i-1 do
          if (v[i] = v[j]) or (i-j = abs(v[i]-v[j]))
               {Hau j an duoc Hau i}
               then exit;
     DatDuoc := true;
end;
(*-------------------------------------------------
        Xuat phat tu dong v[i]+1, tim dong moi
        co the dat duoc Hau i
-------------------------------------------------*)
function Tim(i: byte): Boolean;
begin
     Tim := true;
     while v[i] < n do
          begin
               inc(v[i]);
               if DatDuoc(i) then exit;
          end;
     Tim := false;
end;
(*-------------------------------------------------
        Hien thi nghiem tren man hinh
        Cho bai toan tim mot nghiem
              k=0: vo nghiem
              k=n: co nghiem v[1..n]
-------------------------------------------------*)
procedure KetQua1(k: byte);
var i: byte;
begin
     writeln;
     if k=0 then write('Vo nghiem')
          else
               for i:=1 to k do write(v[i]:3);
     writeln;
end;
(*-------------------------------------------------
         Tim 1 nghiem: xep M quan hau tren ban
         co M x M
-------------------------------------------------*)
procedure XepHau1(M: byte);
var i: byte;
begin
     if (M < 1) or (M > MN) then exit;
     {MN = 20 la gioi han kich thuoc ban co}
     n := M;
     {Khoi tri: Dat cac hau 1..N ngoai ban co.
        Hau i dat tai dau cot i, i=1..N.}
     for i := 1 to n do v[i] := 0;
     i := 1;   {Hau dang xet}
     repeat
          if i > n then    {co nghiem v[1..n]}
               begin
                   KetQua1(n);
                   exit;
               end;
          if i < 1 then    {vo nghiem}
               begin
                    KetQua1(0);
                    exit;
               end;
          if Tim(i)    {co cach di}
               then inc(i)    {Tien}
          else
               begin   {Lui}
                    v[i] := 0;
                    dec(i);
               end;
     until false;
end;
(*--------------------------------------------------
Ghi nghiem thu d vao tep g 'N_HAU.OUT'
    Bai toan tim moi nghiem
--------------------------------------------------*)
procedure KetQua(d: integer);
var i: byte;
begin
     write(g,'Nghiem thu ',d,': ');
     for i := 1 to n do write(g,v[i],BL);
     writeln(g);
end;
(*--------------------------------------------------
Tim moi cach dat M Hau tren ban co M x M
--------------------------------------------------*)
procedure XepHau(M: byte);
var
     i: byte;
     d: integer;   {dem so nghiem}
begin
     if (M<1) or (M>MN) then exit;
     n := m;
     for i := 1 to n do v[i] := 0;
     assign(g,gn);
     rewrite(g);
     i := 1;  {Hau dang xet}
     d := 0;  {Dem so nghiem}
     repeat
          if i > n then   {Tim duoc 1 nghiem}
               begin
                    inc(d);
                    KetQua(d);   {v[1..n] la nghiem thu d}
                    i := 1;  {gia sai}
               end;
          if i < 1 then    {Tim het nghiem}
               begin
                    writeln(g,'Tong cong ',d,' nghiem ');
                    close(g);
                    writeln('Xem ket qua torng file ',gn);
                    readln;
                    exit;
               end;
          if Tim(i) then inc(i)
          else  begin
                     v[i] := 0;
                     dec(i);
                end;
     until false;
end;
BEGIN
     XepHau1(8);   {tim 1 nghiem}
     XepHau(8);    {tim du 92 nghiem}
END.
 
Đã lưu IP Đã lưu IP  
  Đã khóa chức năng gửi bài.
Bài viết trên cùng Gửi trả lời
Powered by FireBoardBài viết mới nhất từ diễn đàn cho các chương trình nhận tin RSS