Sử dụng thuật toán Back Track để liệt kê các xâu nhị phân độ dài n (C/C++)

Sử dụng thuật toán Back Track để liệt kê các xâu nhị phân độ dài n (C/C++)

Xem lại lý thuyết thuật toán Back Track

>> Lý thuyết về thuật toán quay lui Back Track

Biểu diễn các xâu nhị phân dưới dạng b1, b2,..., bn, trong đó bi∈{0, 1 }. Thủ tục đệ qui Try(i) xác định bi với các giá trị đề cử cho bi là 0 và 1. Các giá trị này mặc nhiên được chấp nhận mà không cần phải thoả mãn điều kiện gì (do đó bài toán không cần đến biến trạng thái). thủ tục Init khởi tạo giá trị n và biến đếm count. thủ tục kết quả in ra dãy nhị phân tìm được. Chẳng hạn với n =3, cây tìm kiếm lời giải được thể hiện như hình.

Liệt kê các xâu nhị phân độ dài n bằng thuật toán Back Track

Chương trình cài đặt:

#include <stdio.h>

#include <alloc.h>

#include <conio.h>

#include <stdlib.h>

void Result(int *B, int n){

 int i;

 printf("\n ");

 for (i = 1; i <= n; i++)

  printf("%3d", B[i]);

}

void Init(int *B, int n){

 int i;

 for (i = 1; i <= n; i++)

  B[i] = 0;

}

void Try(int i, int *B, int n){

 int j;

 for (j = 0; j <= 1; j++){

  B[i] = j;

  if (i == n) {

   Result(B, n);

  }

  else Try(i + 1, B, n);

 }

}

void main(void){

 int *B, n; clrscr();

 printf("\n Nhap n=");

 scanf("%d", &n);

 B = (int *)malloc(n*sizeof(int));

 Init(B, n);

 Try(1, B, n);

 free(B);

 getch();

}
Bạn thấy bài viết này như thế nào?: 
Average: 10 (1 vote)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Hướng dẫn sử dụng Email theo tên miền với Windows Live Admin Center

Hướng dẫn sử dụng Email theo tên miền với Windows Live Admin Center

Sử dụng Email theo tên miền là một trong những tiêu chí tạo dựng thương hiệu của bạn, góp phần nâng cao sự chuyên nghiệp trong giao dịch kinh doanh và quản lý hệ thống nhân viên trong công ty.

Android 2.3 Gingerbread vượt lên dẫn đầu thị trường Android

Android 2.3 Gingerbread vượt lên dẫn đầu thị trường Android

Vào đầu tháng 10, thị phần của Android 2.3 Gingerbread chỉ chiếm khoảng 40% trong thị trường Android và xếp thứ hạng 2.

Ứng dụng Apple Maps đang dần được cải thiện

Ứng dụng Apple Maps đang dần được cải thiện

Apple đang giải quyết rất tốt các lỗi xảy ra trong ứng dụng Maps trên iOS 6 mà hãng vừa phát hành gần đây nhằm mang đến người dùng một trải nghiệm bản đồ số tốt hơn.

Công ty diệt chuột T&C

 

Diet con trung