32
3/2/2011 1 49 Gii thut quay lui Gii thut quay lui đưc dng đ Xc đnh li gii (dy gi tr) … … tha tiêu chun no đ … … t tp giá trị xc đnh 50 Gii thut quay lui Gii thut quay lui đưc dng đ Xc đnh li gii (dy gi tr) … … tha tiêu chun no đ … … t tp giá trị xc đnh V d: Đt n quân Hu lên bn c n n Li gii: Dy n v tr Tiêu chun: Không ăn đưc nhau Tp giá trị: n 2 v tr trên bn c

Ky Thuat Quay Lui

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