Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

THUT TON TM KIM THEO CHIU RNG (BREADTH FIRST SEARCH) Ci t bng hng i C s ca phng php ci t ny l "lp lch"

duyt cc nh. Vic thm mt nh s ln lch duyt cc nh k n sao cho th t duyt l u tin chiu rng (nh no gn S hn s c duyt ,trc). V d: Bt u ta thm nh S. Vic thm nh S s pht sinh th t duyt nhng nh (x1, x2,... , xp) k vi S (nhng nh gn S nht). Khi thm nh x1 s li pht sinh yu cu duyt nhng nh (u1, u2 ..., uq) k vi x1. Nhng r rng cc nh u ny "xa" S hn nhng nh x nn chng ch c duyt khi tt c nhng nh x duyt xong. Tc l th t duyt nh sau khi thm x1 s l: (x2, x3..., xp, u1, u2, ..., uq).

Gi s ta c mt danh sch cha nhng nh ang "ch" thm. Ti mi bc, ta thm mt nh u danh sch v cho nhng nh cha "xp hng" k vi n xp hng thm vo cui danh sch. Chnh v nguyn tc nn danh sch cha nhng nh ang ch s c t chc di dng hng i (Queue) Thut ton xc nh cc thnh phn lin thng bng cch duyt theo chiu rng Bc 1: Khi to bin label = 0 v; gn nhn 0 cho tt c c cc nh. Bc 2: Vi mi nh i thuc X Nu nh i c nhn 0 th label = label + 1 Ving v gn nhn nh i vi nhn l label Cui nu Cui vi mi Trong , vic ving v gn nhn c thc hin bng th tc Visit duyt theo chiu rng nh sau: Th tc Visit (nh i, nhn label) Gn nhn label cho nh i Khi to Queue rng y nh i vo queue Lp trong khi queue khng rng Ly ra nh i t queue Vi mi nh j m c cnh ni i vi j Nu j c nhn 0 th Gn nhn label cho nh j y nh j vo queue Cui nu Cui vi mi Cui th tc

Ci t hm visit thay th trong class MyGraph do thy hng dn #include <queue> //Thm vo u file MyGraph.h void MyGraph::visit(int i, int Lab) { verLabs[i] = Lab; queue <int> Q; Q.push(i); while (!Q.empty()) { i = Q.front(); Q.pop(); for(int j = 0; j < nVer; j++) { if(B[i][j] == 1 || B[j][i] == 1) if(verLabs[j] == 0) { verLabs[j] = Lab; Q.push(j); } } } } Ti sao li dng thut ton ny? Cp pht ng trong queue s dng vng nh Heap nn s trnh c tnh trng "Stack Overflow" bn c th chy thoi mi vi th hng triu nh v y l thut ton tm ng i ngn nht (i qua t nh nht) gia 2 nh (cn thm mng nh du v hm truy vt).

You might also like