Bài giảng
Finetest
Giới thiệu
Liên hệ
Facebook
Duyên
Game Bắn Cá
Feed
Go to ...
Bài giảng
Finetest
Giới thiệu
Liên hệ
Facebook
Duyên
Game Bắn Cá
Feed
Go to ...
Android
Tin Đại Cương
Trí Tuệ Nhân Tạo
Lập Trình Cờ
Phần Mềm
Nghĩ Ngắn
Suy Ngẫm
Viết & Lách
Thư Viện
Chưa Phân Loại
Android
Tin Đại Cương
Trí Tuệ Nhân Tạo
Lập Trình Cờ
Phần Mềm
Nghĩ Ngắn
Suy Ngẫm
Viết & Lách
Thư Viện
Chưa Phân Loại
Chủ Đề
Ghi Chép
Nghĩ Ngắn
Suy Ngẫm
Thư Giãn
Viết & Lách
Lập Trình
Android
Java
Lập Trình Cờ
Thông Báo
Thư Viện
Bài Mới
Những quy luật vui của cuộc sống (phần 1)
Kiến trúc đẹp (phần 1)
Sách Python
Đo chiều cao tòa nhà bằng phong vũ biểu – Sự khác nhau giữa học vẹt và học hiểu
Số 42
Có thể bạn sẽ thích
Lưu trữ đám mây tốt nhất (50GB free):
MEGA
Lưu trữ 10GB miễn phí:
MediaFire
Dịch vụ đám mây cực tốt:
DropBox
Lưu trữ đám mây nhỏ nhưng rất thú vị:
CloudMe
Bình luận mới
PlayerNam
Algorithms-K58-PM: Đệ quy – Quay lui – Nhánh cận
28/09/2020
1 bình luận
Các nội dung chính trong buổi này:
Đệ quy
Đệ quy
Đệ quy có nhớ
Quay lui
Nhị phân
Tập con
Hoán vị
Phân tích
Đặt hậu
Nhánh cận
Bài toán người bán hàng (TSP – Traveling Salesman Problem)
Bài tập
Chia sẻ bài viết:
Facebook
Reddit
LinkedIn
Twitter
Print
More
Pocket
Pinterest
Email
Tumblr
Related
Tài liệu đính kèm:
Slide lý thuyết 4 + 5
Trở về khóa học: Thuật Toán Ứng Dụng (59PM)
1 bình luận cho
Algorithms-K58-PM: Đệ quy – Quay lui – Nhánh cận
06/10/2020 - 14:34
admin
says:
#include <iostream> using namespace std; const int MAX = 100; int a[MAX], n = 20, dem = 0; // in phuong an xep hau void print() { dem++; cout << "Phuong an thu " << dem << ":" << endl; for (int i = 1; i <= n; i++, cout << endl) for (int j = 1; j <= n; j++) if (j == a[i]) cout << " x"; else cout << " ."; } bool check(int h, int c) { // kiem tra cot for (int i = 1; i < h; i++) if (c == a[i]) return false; // kiem tra duong cheo chinh for (int i = 1; i < h; i++) if (c-h == a[i]-i) return false; // kiem tra duong cheo chinh for (int i = 1; i < h; i++) if (c+h == a[i]+i) return false; return true; } // dat quan hau o dong thu k void dat(int k) { if (k > n) { print(); return; } for (int i = 1; i <= n; i++) if (check(k, i)) { a[k] = i; dat(k+1); } } int main() { dat(1); } </iostream>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using
namespace
std
;
const
int
MAX
=
100
;
int
a
[
MAX
]
,
n
=
20
,
dem
=
0
;
// in phuong an xep hau
void
print
(
)
{
dem
++
;
cout
<<
"Phuong an thu "
<<
dem
<<
":"
<<
endl
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
,
cout
<<
endl
)
for
(
int
j
=
1
;
j
<=
n
;
j
++
)
if
(
j
==
a
[
i
]
)
cout
<<
" x"
;
else
cout
<<
" ."
;
}
bool
check
(
int
h
,
int
c
)
{
// kiem tra cot
for
(
int
i
=
1
;
i
<
h
;
i
++
)
if
(
c
==
a
[
i
]
)
return
false
;
// kiem tra duong cheo chinh
for
(
int
i
=
1
;
i
<
h
;
i
++
)
if
(
c
-
h
==
a
[
i
]
-
i
)
return
false
;
// kiem tra duong cheo chinh
for
(
int
i
=
1
;
i
<
h
;
i
++
)
if
(
c
+
h
==
a
[
i
]
+
i
)
return
false
;
return
true
;
}
// dat quan hau o dong thu k
void
dat
(
int
k
)
{
if
(
k
>
n
)
{
print
(
)
;
return
;
}
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
if
(
check
(
k
,
i
)
)
{
a
[
k
]
=
i
;
dat
(
k
+
1
)
;
}
}
int
main
(
)
{
dat
(
1
)
;
}
<
/
iostream
>
Trả lời
Bình luận:
Cancel reply
Bình luận mới