Đăng bởi : Nông Ngọc Hoài
4/13/2014
thuvienwinform - Thuật toán trâu bò quen thuộc và khá hữu ích trong việc code. Để tìm tổ hợp đơn giản là tìm một dãy số thỏa mãn điều kiện sau:
- Các số đều khác nhau
- Số sau lớn hơn số trước
- Các bộ số không trùng lặp nhau
-...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; namespace QuayLuiTimToHop { class Program { #region Khai báo static int n, k; static int[] a, dau; #endregion #region THủ tục private static void Xuat(int i) { for (int j = 1; j <= k; j++) Console.Write(a[j] + " "); Console.WriteLine(); } private static void Duyet(int i) { if (i > k) Xuat(i); else { int j; for (j = a[i - 1]; j <= n; j++) { if (dau[j] == 0) { a[i] = j; dau[j] = 1; Duyet(i+1); dau[j] = 0; } } } } #endregion static void Main(string[] args) { #region Đầu vào Console.Write("Nhap va n: "); n = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap va k: "); k = Convert.ToInt32(Console.ReadLine()); a = new int[n+1]; dau = new int[n+1]; for (int i = 0; i < n + 1; i++) dau[i] = 0; #endregion #region Xử lí Console.WriteLine("To hop chap " + k + " cua " + n + ": "); a[0] = 1; Duyet(1); #endregion Console.ReadKey(); } } }Dãy cần tìm là a
Thuật toán quay lui với vòng lặp sẽ bắt đầu từ a[i-1] đề thỏa mãn điều kiện các số khác nhau và số sau lớn hơn số trước. Trong quá trình duyệt kết hợp đánh dấu phần tử đã sử dụng để không bị trùng (ở trong này mình dùng mảng dau)
Khi tìm đủ k phần tử cho mảng a thì xuất ra.
Về lí thuyết quay lui có thể tham khảo trong sách giải thuật và lập trình của Lê Minh Hoàng
Với code này chuyển thành tính chỉnh hợp cũng không có gỉ cả, chỉ cẩn thay vòng lặp thành thế này là OK
Các số trong bộ số sẽ không phải là từ a[i-1] nữa mà là từ 1
for (j = 1; j <= n; j++) { if (dau[j] == 0) { a[i] = j; dau[j] = 1; Duyet(i+1); dau[j] = 0; } }
Xem thêm :
Code
- Lỗi "operation is not valid due to the current state of the object"
- Gửi dữ liệu qua mạng với ThuVienWinform.Mang.GuiDuLieuNoiBo
- Mời sử dụng Tool Import dữ liệu lên Wocommerce siêu tốc
- Mời tải về phần mềm tăng tương tác YouTube chỉ với 14k/tháng
- Bất đồng bộ với Entity Framework, tại sao không?
- Mời dùng thử phần mềm chuyển định dạng font chữ CF3
- Chú ý khi sử dụng ProgressBar
- Đóng gói phần mềm - Đặt tất cả thư viện liên kết động (DLL) vào 1 thư mục
- Tạo mã kích hoạt cho phần mềm
- Lấy IP của máy, địa chỉ IP và tên các máy trọng mạng nội bộ (LAN)
Hình như bài này trên spoj là COMBIN phải không
ReplyDelete