Upload
huando
View
3
Download
0
Embed Size (px)
Citation preview
ton loang theo lp
ton loang theo lp
Nguyn Tun DngTm kim theo chiu rng (Breadth First Search - BFS) - cn gi l thut ton loang v tm kim theo chiu su (Depth First Search - DFS) l 2 thut ton c bn trong l thuyt th. Mc d thut ton DFS vi cu trc d liu kiu ngn xp (Stack) tun theo quy lut LIFO - Last in, First out (vo sau, ra trc) c th ci t d dng bng qu Nhng vn ny sinh nhng bi ton m gii quyt n thun tin hn cn c mt thut ton tm kim khc, l BFS. Vi cu trc d liu kiu hng i (Queue), tun theo quy lut FIFO - First in, First out (vo trc, ra trc). Ci t thut ton loang khng cn dng quy v cng khng n ni phc tp, l mt u im. Hn na, thut ton tm kim theo chiu su 'i s vo th, lu cc nh trn ng i vo ngn xp, cn thut ton tm kim theo chiu rng 'qut ngang' th v lu cc nh vo hng Nh ta bit, c th tn ti nhiu ng i t mt nh A n nh B trn th. Nu bng BFS tm c mt ng i u tin t nh A n nh B th ng i s l ng i qua t nh nht t A n c B. Nhng nu bng DFS th ngc li, ng i tm c u tin cha chc l ng i qua t nh nht. M trong mt s bi ton, mc d vn cn gii quyt c th c bin i, lm cho phc tp hn bi ngi ra nhng chung qui vn c th a v vic tm ng i sao cho phi qua t nh nht. Khi ci t thut ton loang l gii php thch hp. i vi BFS c bn th cc bn tng gp trn cc s bo trc y ca ISM. Tuy nhin, trong cc bi ton c th, mc d vn vi yu cu trn nhng chng ta li phi s dng thut ton loang mt cch linh hot v sng to mi t c kt qu mong Mt v d minh ho cho iu c a ra trong cch gii bi ton MEET - 'Gp g' (thi Quc gia 1998 -1999) di y: Trn mt li vung M*N (M,N < 100), ngi ta t robot A gc tri trn, robot B gc phi d Mi ca li c th t mt vt cn hoc khng ( tri trn v phi di khng c vt cn). Hai robot bt u di chuyn ng thi vi tc nh nhau v khng robot no c dng li trong khi robot kia di chuyn (tr khi n khng th i c na). Ti mi bc, robot ch c th di chuyn theo 4 hng - i ln, i xung, sang tri, sang phi - vo cc k cnh. Hai robot s gp nhau nu chng ng trong cng mt vung. Bi ton t ra l tm cch di chuyn t nht m 2 robot phi thc hin c th gp nhau. D liu vo trong file Meet.inp : - dng u ghi 2 s M,N.- M dng tip theo, mi dng ghi N s 0 hoc 1 m t trng thi ca cc vung: 1-c vt cn, 0-khng c vt cn.Cc s trn cng mt dng ca file d liu cch nhau t nht mt du trng.Kt qu ghi ra file Meet.out :- nu 2 robot khng th gp nhau th ghi k t #.- Ngc li, ghi hai dng, mi dng l mt dy cc l t vit lin nhau m t cc bc i ca robot : U-i ln, D-i xung, L- sang tri, R- sang ph Dng u l cc bc i ca A, dng sau l ca B.
V d: Meet.inp 4 6 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 10 1 0 1 0 0Meet.outDRRRLULU Vi dng bi kiu ny th ai cng ngh ngay n thut ton loang. Nhng loang nh th n v ta c hai robot cng di chuyn. V tt nhin, bi ton ny tr nn hay hn so vi cc bi loang thng thng. Chc hn ai cng bit mt th nghim ph bin v s giao thoa sng: 'cho 2 chic kim (khng cch xa nhau lm) dao ng cng tn s trn mt nc, khi c th quan st thy nhng vng trn ng tm trn mt nc c loang rng dn ra cho n mt lc no , 2 vng trn u tin c to ra bi s dao ng ca 2 chic kim ny gp nhau, giao thoa vi nha.
T th nghim , chng ta c th a ra cch di chuyn cho 2 robot theo kiu loang chiu rng, nhng ch loang tng lp, tng lp mt i vi mi robot, ging nh 2 vng trn loang rng dn ra trn mt nc.
V mt tng th s loang ca 2 robot l song song, ng thi vi nha Nhng bt tay vo lm c th th khng cho php chng ta ci t thut ton theo kiu song song V th cch gii quyt ca ti l s dng mt vng lp (Procedure Strati-BFS) thc hin lun phin 2 th tc: c cho robot 1 loang ra mt lp mi xung quanh (Procedure BFSRobot1) th dng li cho robot 2 cng loang ra mt lp xung quanh khc (Procedure BFSRobot2). Vng lp s kt thc nu hai lp va mi loang ca 2 robot ny giao nhau (PathFound - 2 robot s gp c nhau) hoc c hai robot u khng th di chuyn c na (Stoped - bi ton v nghim). Ti tm gi y l thut ton 'loang theo lp'. Bn cht ny thc ra tn ti trong cch lp ca thut ton loang c bn v y, vic khai thc c n gip chng ta gii quyt tt vn t r Tuy nhin, khi nim lp y nn hiu nh th n Cc bn bit trong cch lp ca BFS th ti mi ln lp, ta s ly ra (get out) cc nh trong hng i t Queue[first] n Queue[last] a vo (put in ) hng i cc nh khc k vi cc nh ly r Sau cc bin first, last s c iu chnh tr thnh v tr u v v tr cui ca on cha cc nh mi ny trong Queue (xem Procedure BFSRobot1; v Procedure BFSRobot2;). Chng ta gi tp hp cc nh t Queue[first] n Queue[last] trong mi bc lp ca BFS l mt lp. Di y l chng trnh gi Trong trng trnh c s dng mt s th thut c bn kh quen thuc trong bi ton tm ng i trn li vung nh k thut 'r - vin xung quanh mng A bng cc s 1 khng phi kim tra iu kin vt khi gii hn ca li trong qu trnh di chuyn robot: A[0,j] = A[M+1,j] = A[i,0] = A[i,N+1] = 1 (i = 1,..., M ; j = 1,... N). V 2 mng hng Hi, Hj gip ta c th dng vng for thc hin 4 hng i L, U, R, D d dng hn trong khi loang, thun tin cho vic vit chng trnh. Mng New1 c dng nh du cc vung thuc lp m robot 1 va loang ti, khi cho robot 2 loang nu gp phi mt trong cc ny th ngha l tm c nghim ca bi ton. C th tit kim b nh nu khng dng New1, m nh du ngay bng mng A vi cch cng thm 100 vo A[x,y] nu (x,y) thuc lp m robot 1 va loang ti (v A[x,y] ch ghi ton s 1 hoc s 0). Hai mng Q1, Q2 l hng i cho vic loang robot 1 v robot 2. Nu cn tit kim b nh c th s dng chung mt hng i Q cho vic loang ca 2 robot, robot 1 s dng phn u t Q[1] tr i cn robot 2 s dng phn cui t Q[max*max] tr li, v tng s vung m c 2 robot i qua khng vt qu kch thc li M*N cho n khi hai lp loang ca 2 robot giao nhau, m vng lp li c kt thc ngay ti y (ti th ci t kiu ny, chng trnh vn chy ra kt qu ng).Cn vic nh du ng i c thc hin bi cch cng thm k vo A[x,y] nu (x,y) l c i n t trc theo hng k (s t nhin k chy t 1 n 4 ln lt ch 4 hng i ca robot: L, U, R, D). xm,ym l to vung 2 robot gp nha Phi s dng thm bin pred2 ghi nhn hng m t Robot 2 i ti (xm,ym) v A (xm,ym) dng ghi nhn hng m t Robot 1 i n gp nhau. Vic tm li ng i cho tng robot c thc hin trong procedure FindS1S2.Trong khun kh bi bo, khng th gii thch k chng trnh, v vy cc bn c th nghin cu chi tit thm qua chng trnh gii c th di y: Uses Crt;Const Inf = 'Meet.inp';Outf = 'Meet.out';Max = 100;Hi : Array[1..4]of integer = (0,-1,0,1);Hj : Array[1..4]of integer = (-1,0,1,0);Type Square=record x,y:byte; end;Var A : Array[0..Max+1,0..Max+1]of byte;Q1,Q2 : Array[1..Max*Max]of square;New1 : Array[0..Max+1,0..Max+1]of Boolean;First1,Last1,First2,Last2,N,M,Pred2,Xm,Ym : Word;PathFound,Stoped : boolean;S1,S2 : string;Procedure Readinp;var f:text; i,j:word;Beginfillchar(A,sizeof(A),1); {ro xung quanh}assign(f,inf); reset(f);readln(f,M,N);for i:=1 to M dobeginfor j:=1 to N do read(f,a[i,j]);readln(f);end;close(f);End;Procedure Init;Beginfirst1:=1; last1:=1;Q1[1].x:=1; Q1[1].y:=1;first2:=1; last2:=1;Q2[1].x:=M; Q2[1].y:=N;End;Procedure BFSRoBot1;var x,y,i,j,k:word;beginj:=last1;for i:=first1 to last1 dofor k:=1 to 4 dobeginx:=Q1[i].x + Hi[k];y:=Q1[i].y + Hj[k];if A[x,y]=0 thenbegininc(A[x,y],k);inc(j);Q1[j].x:=x; Q1[j].y:=y;New1[x,y]:=true;end;end;first1:=last1+1; last1:=j;if first1>last1 then Stoped:=true;end;Procedure BFSRoBot2;var x,y,i,j,k:word;beginj:=last2;for i:=first2 to last2 dobeginfor k:=1 to 4 dobeginx:=Q2[i].x + Hi[k];y:=Q2[i].y + Hj[k];if A[x,y]=0 thenbegininc(A[x,y],k);inc(j);Q2[j].x:=x; Q2[j].y:=y;end;if New1[x,y] then beginPathFound:=true;Pred2:=k;xm:=x; ym:=y;Exit;end;end;end;first2:=last2+1; last2:=j;if first2>last2 then Stoped:=true;end;Procedure StratiBFS;BeginPathFound:=False;Stoped:=False;Repeatfillchar(New1,sizeof(New1),false);BFSRoBot1;BFSRoBot2;Until Pathfound or Stoped;End;Procedure FindS1S2;var x,y,k:byte;begins1:=''; s2:='';x:=xm; y:=ym;{RoBot1}repeatk:=A[x,y];case k of1 : s1:=s1+'L';2 : s1:=s1+'U';3 : s1:=s1+'R';4 : s1:=s1+'D';end;x:=x-Hi[k];y:=y-Hj[k];until (x=1)and(y=1);{RoBot2}x:=xm; y:=ym; A[x,y]:=Pred2;repeatk:=A[x,y];case k of1 : s2:=s2+'L';2 : s2:=s2+'U';3 : s2:=s2+'R';4 : s2:=s2+'D';end;x:=x-Hi[k];y:=y-Hj[k];until (x=M)and(y=N);end;Procedure WriteOut;var f:text; i,j:byte;beginassign(f,outf); rewrite(f);If not(pathfound) thenbeginwrite(f,'#'); close(F); exit;end;FindS1S2;for i:=length(s1) downto 1 do write(f,s1[i]);writeln(f);for i:=length(s2) downto 1 do write(f,s2[i]);close(f);end;BEGINReadinp;Init;StratiBFS;WriteOut;END.Chng ta cn ch rng, bi ton c th c nhiu nghim v tn ti nhiu cch i t gc tri trn n gc phi d Hoc, tu thuc vo trng thi ca li, hai robot s c th khng bao gi gp nha Trng hp xy ra kh hin nhin khi khng tn ti ng i t (1,1) n (M,N), hoc tn ti, nhng ng i c di chn (ta tm gi di ng i l tng s nh trn ng i ). V hai robot ch c th gp nhau nu nh c mt ng i di l t (1,1) n (M,N). C th chng minh iu ny: gi s 2 robot gp nhau (xm,ym) th ng i t (1,1) n (xm,ym) phi bng ng i t (M,N) n (xm,ym) v gi s bng d , khi tng di ng i t (1,1) n (M,N) s bng (2d - 1) l mt s l. Nh vy, y cng l mt hng gii quyt bi ton ny, tc l tm ng i di l ngn nht t gc tri trn n gc phi d chnh l con ng hai robot gp nhau m s bc di chuyn cn thit l t nht. Tuy nhin, ti khng tm li gii theo cch , phn ny dnh cho bn c t lm thm. tng loang theo tng lp trn, khng ch gii bi ton Meet m hy vng rng n cn c tc dng trong cc ng dng khc ca bn.
M bi: ROBOCON
Cuc thi vng loi Robocon nm nay c ch "Gp g". Cc Robot s tranh ti trn mt li vung gm n hng n ct. Cc hng ca li c nh s t 1 n n, t trn xung di. Cc ct ca li c nh s t 1 n n, t tri sang phi. Trn k vung ca li c t chng ngi vt. phn thi Robot t ng, mi i s phi s dng ng thi hai con Robot.
Ti thi im xut pht, Robot th nht c t ti (1,1), mi bc ch c php di chuyn sang k cnh bn phi, hoc xung k cnh bn di hoc xung k nh pha di bn phi.
Robot th hai c t ti (1,n), mi bc ch c php di chuyn sang k cnh bn tri hoc xung k cnh bn di hoc xung k nh pha di bn tri.
Bt u t thi im xut pht c tnh l 0, hai Robot phi di chuyn lin tc theo qui tc nu. Thi gian di chuyn t mt sang k tip c tnh l 1 giy. Nhim v ca i chi l phi lp trnh iu khin hai Robot xut pht cng lc, di chuyn trnh chng ngi vt gp nhau ti mt vung khng c chng ngi vt. Hai Robot gp nhau cng sm i chi cng c nhiu im. Li vung c thit k m bo l lun c cch i hai Robot gp c nhau.
Yu cu: Hy tm cch iu khin sao cho hai Robot gp nhau thi im sm nht.
Rng buc: 50% s tests ng vi 50% s im ca bi c n 100.
Input
Dng th nht cha hai s nguyn dng n, k (n 500, k 10000).
Dng th i trong s k dng tip theo cha 2 s nguyn dng ui, vitng ng l ta hng v ct ca c t chng ngi vt (i = 1, 2, ..., k).
Cc s trn cng mt dng c ghi cch nhau t nht mt du cch.
Output
Ghi ra mt s nguyn dng l thi im sm nht tm c.
Example
Input:5 52 21 42 33 54 2
Output:3