Bài giảng
Phần mềm
Giới thiệu
Liên hệ
Game Bắn Cá
Feed
Go to ...
Bài giảng
Phần mềm
Giới thiệu
Liên hệ
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
Số 42
Vài câu nói vui nổi tiếng trong ngành IT
Tửu sư
Muốn thành công trong ngành IT: Đừng quan tâm đến bằng đại học
Từ Grab đến các mối họa của nền kinh tế chia xẻ
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
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
LinkedIn
Twitter
Tumblr
Print
More
Pocket
Reddit
Pinterest
Email
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