Upload
nguyen-van
View
227
Download
1
Embed Size (px)
Citation preview
3/2/2011
1
49
Giai thut quay lui
Giai thut quay lui c dung
Xac inh li giai (day gia tri)
thoa tiu chun nao o
t tp gi tr xac inh
50
Giai thut quay lui
Giai thut quay lui c dung
Xac inh li giai (day gia tri)
thoa tiu chun nao o
t tp gi tr xac inh
Vi du: t n qun Hu ln ban c n n
Li giai: Day n vi tri
Tiu chun: Khng n c nhau
Tp gi tr: n2 vi tri trn ban c
3/2/2011
2
51
Bai toan t n = 4 qun Hu
Co 44 = 256 kha nng tr thanh li giai
Biu din bng Cy khng gian cac trang thai
Cy nay co 256 nut la
Mt con ng t gc n la la mt kha nng
52
Cy khng gian cac trang thai
Cp (i, j) trn mi nut: Hu t trn dong i, ct j
3/2/2011
3
53
Giai thut quay lui vt can thng minh
Nut khng trin vong: Con ng i qua khng cho li giai
Ngc lai: nut trin vong
54
3/2/2011
4
55
56
3/2/2011
5
57
58
3/2/2011
6
59
60
3/2/2011
7
61
62
3/2/2011
8
63
64
3/2/2011
9
65
Cac bc tim kim xac inh li giai u tin cua bai toan 4
con hu trn ban c 4 4
66
Giai thut tng quat
void Quay_lui(node v) {
if (kim_tra(v) == "co trin vong)
if (at n li giai tai nut v)
In kt qua;
else
for (tng nut u con nut v) {
Quay_lui(u);
Khi phuc lai trang thai cu;
}
}
3/2/2011
10
67
Bai toan n-Hu
Pht biu
t an toan n qun hu ln ban c n n
68
Bai toan n-Hu
Pht biu
t an toan n qun hu ln ban c n n
Nhn xet:
Hu co th n nhau trn cung: dong, ct, ng cho
3/2/2011
11
69
Bai toan n-Hu
Pht biu
t an toan n qun hu ln ban c n n
Nhn xet:
Hu co th n nhau trn cung: dong, ct, ng cho
Cac trn ng cho chinh (va song song):
(dng i ct j) = const
70
Bai toan n-Hu
Pht biu
t an toan n qun hu ln ban c n n
Nhn xet:
Hu co th n nhau trn cung: dong, ct, ng cho
Cac trn ng cho chinh (va song song):
(dng i ct j) = const
Cac trn ng cho phu (va song song):
(dng i + ct j) = const
3/2/2011
12
71
Cu truc d liu
bool a[n]
a[j] = true / false
Khng co/co H trn ct j
72
Cu truc d liu
bool a[n]
a[j] = true / false
Khng co/co H trn ct j
int x[n]
x[i] = j: H th i t tai dong i va ct j
3/2/2011
13
73
Cu truc d liu
bool a[n]
a[j] = true / false
Khng co/co H trn ct j
int x[n]
x[i] = j: H th i t tai dong i va ct j
bool b[2 n]
b[i + j] = true / false
Khng co/co H trn ng cho phu (i + j)
74
Cu truc d liu
bool a[n]
a[j] = true / false
Khng co/co H trn ct j
int x[n]
x[i] = j: H th i t tai dong i va ct j
bool b[2 n]
b[i + j] = true / false
Khng co/co H trn ng cho phu (i + j)
bool c[(n 1) .. (n 1)]
c[i j] = true / false
Khng co/co H trn ng cho chinh (i j)
3/2/2011
14
75
void n_Queens(i) {
for (j = 1; j
3/2/2011
15
77
Nga i tun
Pht biu: t qun nga ln ban c n n
Vi tri u tin: (x0, y0)
Chi ra moi hanh trinh (nu co), i qua tt ca cac ung
mt ln (theo lut c vua)
78
Nga i tun
Pht biu: t qun nga ln ban c n n
Vi tri u tin: (x0, y0)
Chi ra moi hanh trinh (nu co), i qua tt ca cac ung
mt ln (theo lut c vua)
Nhn xet:
Di chuyn n ti a 8 vi tri
Khng phai lun co li giai
Qui c: (dong x, ct y)
3/2/2011
16
79
(2, 1) (2, 1)
(1, 2) 4 3 (1, 2)
5 2
6 1
(1, 2) 7 0 (1, 2)
(2, 1) (2, 1)
80
Cu truc d liu
int h[n][n]: Ban c
h[x][y] = 0/i
Nga cha/a i qua tai bc th i
3/2/2011
17
81
Cu truc d liu
int h[n][n]: Ban c
h[x][y] = 0/i
Nga cha/a i qua tai bc th i
int dong[8] = {2, 1, 1, 2, 2, 1, 1, 2};
int cot[8] = {1, 2, 2, 1, 1, 2, 2, 1};
Kha nng di chuyn
82
Cu truc d liu
int h[n][n]: Ban c
h[x][y] = 0/i
Nga cha/a i qua tai bc th i
int dong[8] = {2, 1, 1, 2, 2, 1, 1, 2};
int cot[8] = {1, 2, 2, 1, 1, 2, 2, 1};
Kha nng di chuyn
int k ( [1, 8]): Chi ra bc i k tip (cn kim tra)
u = x + dong[k]
v = y + cot[k]
3/2/2011
18
83
void KnightTour(int i, int x, int y) {
for (k = 1; k
3/2/2011
19
85
86
n gian, mi vi tri co 4 kha nng di chuyn, ln lt theo
hng: Bc, ng, Nam, Ty
3/2/2011
20
87
n gian, mi vi tri co 4 kha nng di chuyn, ln lt theo
hng: Bc, ng, Nam, Ty
Mi bc i c chp nhn s anh du bng x
88
n gian, mi vi tri co 4 kha nng di chuyn, ln lt theo
hng: Bc, ng, Nam, Ty
Mi bc i c chp nhn s anh du bng x
im dng: Khng th i tip quay lui v vi tri trc o
Xoa x tai im dng
Lui v va xt hng i k tip
3/2/2011
21
89
n gian, mi vi tri co 4 kha nng di chuyn, ln lt theo
hng: Bc, ng, Nam, Ty
Mi bc i c chp nhn s anh du bng x
im dng: Khng th i tip quay lui v vi tri trc o
Xoa x tai im dng
Lui v va xt hng i k tip
Nu vn khng i c thi tip tuc quay lui,
90
n gian, mi vi tri co 4 kha nng di chuyn, ln lt theo
hng: Bc, ng, Nam, Ty
Mi bc i c chp nhn s anh du bng x
im dng: Khng th i tip quay lui v vi tri trc o
Xoa x tai im dng
Lui v va xt hng i k tip
Nu vn khng i c thi tip tuc quay lui,
Tin trinh dng khi:
n ich, hoc
Khng th quay lui Khng co li giai
3/2/2011
22
91
Giai thut th:
1. Bt u tai co nhan la S
92
Giai thut th:
1. Bt u tai co nhan la S
2. anh mt du x trn mi i qua, ni dai con ng cho
n khi gp:
a) co nhan F: In kt qua
3/2/2011
23
93
Giai thut th:
1. Bt u tai co nhan la S
2. anh mt du x trn mi i qua, ni dai con ng cho
n khi gp:
a) co nhan F: In kt qua
b) trng: Chp nhn. Xt hng i tip
Nu khng thanh cng Bc d
94
Giai thut th:
1. Bt u tai co nhan la S
2. anh mt du x trn mi i qua, ni dai con ng cho
n khi gp:
a) co nhan F: In kt qua
b) trng: Chp nhn. Xt hng i tip
Nu khng thanh cng Bc d
c) cha x: M cung cha ng vong xem y la
mt li Bc d
3/2/2011
24
95
Giai thut th:
1. Bt u tai co nhan la S
2. anh mt du x trn mi i qua, ni dai con ng cho
n khi gp:
a) co nhan F: In kt qua
b) trng: Chp nhn. Xt hng i tip
Nu khng thanh cng Bc d
c) cha x: M cung cha ng vong xem y la
mt li Bc d
d) Xoa du x tai hin hanh va quay lui v trc o,
th hng i k tip
Nu khng th quay lui Khng co li ra
96
Cu truc d liu:
char maze[N][N]: M cung
xut phat chi ra bi toa bt u
Mi cua maze cha 1 trong 4 gia tri:
: trng, co th i
F: ich
#: tng
x: a i qua
3/2/2011
25
97
Cu truc d liu:
char maze[N][N]: M cung
xut phat chi ra bi toa bt u
Mi cua maze cha 1 trong 4 gia tri:
: trng, co th i
F: ich
#: tng
x: a i qua
enum DIR {North, East, South, West, Failed}
Biu din th t cac hng
98
bool find(int X, int Y) {
switch (maze[X][Y]) {
case F: return true;
case #:
case x: return false;
case :
maze[X][Y] = x;
bool found = false;
DIR dir = North;
while ((!found) && (dir != Failed)) {
switch (dir) {
case North: found = find(X, Y - 1); break;
case East: found = find(X + 1, Y); break;
case South: found = find(X, Y + 1); break;
case West: found = find(X - 1, Y);
}
dir = Next(dir);
}
if (!found) maze[X][Y] = ;
return found;
}
}
3/2/2011
26
99
Bai toan Tng cac tp con
Pht biu: Mt tn trm ly c nhiu thoi vang khac nhau
Yu cu: Chi ly nhng thoi vang sao cho tng khi lng va
ung vi sc mang cua tui
Goi:
Gii han sc mang cua tui la W
Co n thoi vang, tng thoi co khi lng wi
100
Vi du: n = 5 va W = 21 vi
w1 = 5, w2 = 6, w3 = 10, w4 = 11 va w5 = 16.
Vi
w1 + w2 + w3 = 5 + 6 + 10 = 21
w1 + w5 = 5 + 16 = 21
w3 + w4 = 10 + 11 = 21
nn li giai cua bai toan nay la 3 tp con:
1. {w1, w2, w3}
2. {w1, w5}
3. {w3, w4}
3/2/2011
27
101
Cy khng gian trang thai c xy dng, vi n = 3, W = 6 va
w1 = 2, w2 = 4, w3 = 5
0
2 0
6 2 4 0
7 211 6 5 09 4
2 0
04
5 0 5 05 0 5 0
04
w1 = 2
w2 = 4
w3 = 5
102
Cac thoi vang cn c sp xp theo th t tng dn v
khi lng
3/2/2011
28
103
Cac thoi vang cn c sp xp theo th t tng dn v
khi lng
Goi weight la tng khi lng at c tai mc th i
wi+1 la khi lng nhe nht cha c a vao
104
Cac thoi vang cn c sp xp theo th t tng dn v
khi lng
Goi weight la tng khi lng at c tai mc th i
wi+1 la khi lng nhe nht cha c a vao
Nu weight + wi+1
= W: xac inh li giai
> W: nut k tip (khi lng wi+1) la khng trin vong
3/2/2011
29
105
Cac thoi vang cn c sp xp theo th t tng dn v
khi lng
Goi weight la tng khi lng at c tai mc th i
wi+1 la khi lng nhe nht cha c a vao
Nu weight + wi+1
= W: xac inh li giai
> W: nut k tip (khi lng wi+1) la khng trin vong
Goi total la tng cac khi lng con lai
Nu weight + total < W thi nut k tip (khi lng
wi+1) cung khng trin vong
106
Vi du: n = 4 va W = 13 vi w1 = 3, w2 = 4, w3 = 5, w4 = 6
0
3 0
7 3 4 0
8 312 7 9 4
3 0
04
5 05 0 5 0
04
w1 = 3
w2 = 4
w3 = 5
13 7
6 0w4 = 6
x x + x +
+
x
3/2/2011
30
107
void sum_of_subsets(int i, int weight, int total){
if ((weight + total >= W) &&
(weight == W || weight + w[i + 1]
3/2/2011
31
109
Chng trinh khng kim tra iu kin i = n vi luc nay:
weight + total = weight + 0 = weight
Xt biu thc:
(weight + total >= W) &&
(weight == W || weight + w[i+1] = W) &&
(weight == W || weight + w[i+1] = W) = false
Nut tr thanh khng trin vong
3/2/2011
32
111
Chng trinh khng kim tra iu kin i = n vi luc nay:
weight + total = weight + 0 = weight
Xt biu thc:
(weight + total >= W) &&
(weight == W || weight + w[i+1] = W) = false
Nut tr thanh khng trin vong
weight > W
Khng xay ra vi mc qui trc o, a kim tra
(weight + w[i + 1] = W) &&
(weight == W || weight + w[i+1] = W) = false
Nut tr thanh khng trin vong
weight > W
Khng xay ra vi mc qui trc o, a kim tra
(weight + w[i + 1] = W) (weight == W) true
at n kt qua va khng qui na