Kết quả 1 đến 10 của 10

Chủ đề: Bài Toán Dò Mìn

  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    2

    Bài Toán Dò Mìn

    Các bạn giỏi pascal giải dùm mính pài này nha :
    Cho một bãi mìn kích thước mxn
    Bãi mìn được xác định bởi hai loại bản đồ :
    - Bản đồ vị trí với quy ước : 0 nếu tại đó không có mìn; 1 nếu ngược lại.
    -Bản đồ mật độ với quy ước : điểm A[i,j] (A: bãi mìn; 1<=i<=m; 1<=j<=n) chứa giá trị là tổng số mìn chung quanh nó (trừ nó ra).
    Yêu cấu : nhập m,n và bản đồ mật độ. Lập trình để từ bản đồ mật độ suy ra được bản đồ vị trí.
    Vd:
    Input :
    1 3 3 3 3 1
    2 5 4 4 4 2
    4 5 4 3 3 1
    2 3 3 1 2 1
    Out:
    1 0 0 1 1 0
    1 0 1 1 0 0
    0 1 1 0 0 1
    1 1 0 0 0 1

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Các bạn giỏi pascal giải dùm mính pài này nha :
    Cho một bãi mìn kích thước mxn
    Bãi mìn được xác định bởi hai loại bản đồ :
    - Bản đồ vị trí với quy ước : 0 nếu tại đó không có mìn; 1 nếu ngược lại.
    -Bản đồ mật độ với quy ước : điểm A[i,j] (A: bãi mìn; 1<=i<=m; 1<=j<=n) chứa giá trị là tổng số mìn chung quanh nó (trừ nó ra).
    Yêu cấu : nhập m,n và bản đồ mật độ. Lập trình để từ bản đồ mật độ suy ra được bản đồ vị trí.
    Vd:
    Input :
    1 3 3 3 3 1
    2 5 4 4 4 2
    4 5 4 3 3 1
    2 3 3 1 2 1
    Out:
    1 0 0 1 1 0
    1 0 1 1 0 0
    0 1 1 0 0 1
    1 1 0 0 0 1
    Nói rõ đề chút được không bạn, mình không hiểu đề lắm.
    1. Bản đồ của bạn có dạng 1 ma trận ( Mảng 2 chiều). Hay dạng nào?
    -Bản đồ mật độ với quy ước : điểm A[i,j] (A: bãi mìn; 1<=i<=m; 1<=j<=n) chứa giá trị là tổng số mìn chung quanh nó (trừ nó ra).
    2.Chung Quanh là ở đâu, tấc cả các ô còn lại hay các ô nào?
    3.Các con số cho ở Input có ý nghĩa gì?...

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    1
    Bài toán đưa ra không rõ ràng về input và ý nghĩa lắm, Đề nghị bạn cung cấp thêm thông tin#-o

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    2
    các bạn chơi trò dò mìn trong máy k ? Đọc kĩ lại đề xem [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] . Chung wanh là 9 ô

  5. #5
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Bài toán trên phát triển thành bài “Hình chữ nhật có chôn mìn”.
    Cho một sân hình chữ nhật kích thước MxN ô vuông. Trên mỗi ô vuông có thể chôn hoặc không chôn 1 quả mìn. Tình trạng bãi mìn có thể được mô tả bở một trong 2 cách sau:
    + Cách 1: Dùng một mảng MIN1[1..M, 1..N] trong đó MIN1[i, j] =0/1 tùy thuộc ô (i, j) không có hoặc có mìn.
    + Cách 2: Mỗi ô của sân có nhiều nhất 8 ô kề với nó (hình 1). Ta cho tương ứng các ô này với các số 1, 2, 4, 8, 16, 32, 64, 128 như hình 1. Khi đó ta lập mảng MIN2[1..M, 1...N] như sau: MIN2[i, j] bằng tổng các số hạng có dạng X.Y trong đó X là số tương ứng với một ô kề với nó, Y bằng 1/0 tùy theo ô đó có mìn hay không, ô (i, j) có bao nhiêu ô kề thì có bấy nhiêu số hạng. Trong hình 2 cho ví dụ về cách lập bảng MIN2 ứng với tình trạng mìn cho bởi mảng MIN1.

    Mã:
    1     2     4             1   0   1          16   184   96
    128  ô i,j   8            0   1   1          58    109   194
    64   32     16            1   1   0          12   134    131
                                    MIN1                  MIN2
        Hình 1                             Hình 2:
    Viết chương trình thực hiện các việc sau:
    1.Đọc từ file MIN1.INP có cấu trúc: dòng đầu ghi 3 số M, N, S (S <=100). Trong M dòng sau, dòng thứ i+1 ghi lần lượt N số MIN1[i,1], …, MIN1[i,N]. Sau đó ghi vào file MIN1.OUT mảng MIN2 thể hiện theo cách 2 tình trạng bãi mìn cho bởi mảng MIN1.
    2.Đọc từ file MIN2.INP có cấu trúc giống MIN1.INP nhưng các số là của mảng MIN2[i, j]. Sau đó ghi ra file MIN2.OUT tình trạng bãi mìn theo cách thứ nhất.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    2
    2 bài này # nhau hoàn toàn mà a

  7. #7
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ừa! Đúng rồi. Nãy không đọc kỹ nên nhầm mất. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
    Có ai có ý kiến nào về ý tưởng không?

  8. #8
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Các bạn đóng góp ý kiến nhé!

    Mã:
    Uses Crt;
    Const
            c = 100;
    Type
            ma = Array[0..c+1, 0..c+1] Of Byte;
    Var
            f : Text;
            m, n : Byte;
            min1, min2 : ma;
    
    Procedure doc(st : String; Var x : ma);
    Var i, j : Byte;
    Begin
            Assign(f, st);
            Reset(f);
            Readln(f, m, n);
            For i := 1 To m Do
            Begin
                    For j := 1 To n Do Read(f, x[i, j]);
                    Readln(f);
            End;
            Close(f);
    End;
    
    Procedure ghi(st : String; x : ma);
    Var i, j : Byte;
    Begin
            Assign(f, st);
            Rewrite(f);
            For i := 1 To m Do
            Begin
                    For j := 1 To n Do Write(f, x[i, j], ' ');
                    Writeln(f);
            End;
            Close(f);
    End;
    
    Procedure doi12;
    Var i, j, s : Byte;
    Begin
            For i := 1 To m Do
            Begin
                    min1[i, 0] := 0;
                    min1[i, n+1] := 0;
            End;
            For i := 1 To m Do
            For j := 1 To n Do
            Begin
                    s := min1[i-1, j-1] + min1[i-1, j]*2 + min1[i-1, j+1]*4;
                    s := s + min1[i, j+1]*8 + min1[i+1, j+1]*16 + min1[i+1, j]*32;
                    s := s + min1[i+1, j-1]*64 + min1[i, j-1]*128;
                    min2[i, j] := s;
            End;
    End;
    
    Procedure doi21;
    Var i, j, k : Byte;
    Begin
            For i := 1 To m Do
            For j := 1 To n Do
            If min2[i, j] = 0 Then
            Begin
                    min1[i-1, j+1] := 0; min1[i-1, j] := 0;
                    min1[i-1, j-1] := 0; min1[i, j-1] := 0;
                    min1[i+1, j-1] := 0; min1[i+1, j] := 0;
                    min1[i+1, j+1] := 0; min1[i, j+1] := 0;
            End
            Else
            Begin
                    k := min2[i, j];
                    If k >= 128 Then
                    Begin
                            min1[i, j-1] := 1;
                            k := k - 128;
                    End
                    Else min1[i, j-1] := 0;
                    If k >= 64 Then
                    Begin
                            min1[i+1, j-1] := 1;
                            k := k - 64;
                    End
                    Else min1[i+1, j-1] := 0;
                    If k >= 32 Then
                    Begin
                            min1[i+1, j] := 1;
                            k := k - 32;
                    End
                    Else min1[i+1, j] := 0;
                    If k >= 16 Then
                    Begin
                            min1[i+1, j+1] := 1;
                            k := k - 16;
                    End
                    Else min1[i+1, j+1] := 0;
                    If k >= 8 Then
                    Begin
                            min1[i, j+1] := 1;
                            k := k - 8;
                    End
                    Else min1[i, j+1] := 0;
                    If k >= 4 Then
                    Begin
                            min1[i-1, j+1] := 1;
                            k := k - 4;
                    End
                    Else min1[i-1, j+1] := 0;
                    If k >= 2 Then
                    Begin
                            min1[i-1, j] := 1;
                            k := k - 2;
                    End
                    Else min1[i-1, j] := 0;
                    If k >= 1 Then
                    Begin
                            min1[i-1, j-1] := 1;
                            k := k - 1;
                    End;
            End;
    End;
    
    Begin
            doc('min1.inp', min1);
            doi12;
            ghi('min1.out', min2);
            doc('min2.inp', min2);
            doc21;
            ghi('min2.out', min1);
    End.

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    7
    e chỉ bik way lui trên mảng 2 chiều thôi . Code mãi , chưa ra [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG](

  10. #10
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Gợi ý nè!!

    Trích dẫn Gửi bởi dth_sp
    Các bạn giỏi pascal giải dùm mính pài này nha :
    Cho một bãi mìn kích thước mxn
    Bãi mìn được xác định bởi hai loại bản đồ :
    - Bản đồ vị trí với quy ước : 0 nếu tại đó không có mìn; 1 nếu ngược lại.
    -Bản đồ mật độ với quy ước : điểm A[i,j] (A: bãi mìn; 1<=i<=m; 1<=j<=n) chứa giá trị là tổng số mìn chung quanh nó (trừ nó ra).
    Yêu cấu : nhập m,n và bản đồ mật độ. Lập trình để từ bản đồ mật độ suy ra được bản đồ vị trí.
    Vd:
    Input :
    1 3 3 3 3 1
    2 5 4 4 4 2
    4 5 4 3 3 1
    2 3 3 1 2 1
    Out:
    1 0 0 1 1 0
    1 0 1 1 0 0
    0 1 1 0 0 1
    1 1 0 0 0 1
    Đặt cái mảng Input là Min1 zới Output là Min2 nha.
    Mình gợi ý cho bạn nè.
    _ Bạn sử dụng quay lui trên mảng 2 chiều.
    _ i>m thì print và exit;
    _ Else thì cho Min2[i,j] nhận gtrị là 0 hoặc 1.
    _ Nếu x[i,j]=1 thì giảm (Min1[i-1,j-1]..Min1[i+1,j+1]) 1 đvị, nhớ cộng lại 1 cho Min1[i,j] nha.
    _ Đkiện để xét tiếp là :
    + Nếu (i=m) và (1<j<n) và Min1(i,j-1)=0;
    + Nếu (j=n) và (1<i<m) và Min1(i-1,j)=0;
    + Nếu (1<i<m) và (1<j<n) và Min1(i-1,j-1)=0;
    --> Đúng thì nếu j<n thì Xet(i,j+1) else Xet(i+1,1);
    -->Ko đúng thì quay lui và tăng lại mấy ô xung quanh.

    Chúc bạn thành công.

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •