Bài tập Học phần Toán rời rạc 2

pdf 111 trang huongle 1900
Bạn đang xem 20 trang mẫu của tài liệu "Bài tập Học phần Toán rời rạc 2", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_tap_hoc_phan_toan_roi_rac_2.pdf

Nội dung text: Bài tập Học phần Toán rời rạc 2

  1. TRƯNGðIHCSƯPHMKTHUTHƯNGYÊN KHOACƠNGNGHTHƠNGTIN BÀITP HCPHNTỐNRIRC2 Trìnhđđàoto : ðihc Hđàoto : Chínhquy/Liênthơng
  2. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 LINĨIðU Cĩthnĩitốnhcrirclàmơntiênquytvàhiuqunhtđngưihc nângcaotưduytốnhctrongphântích,thitkthuttốnvàrènluynknăng lptrìnhvinhngthuttốnphctp.Khơngnhngthnĩcịnlà“cangõ”đ ngưi hc cĩ th tip cn vi rt nhiu modul trong khoa hc máy tính (như Chươngtrìnhdch,lýthuyttínhtốn,Trítunhânto, ).Bàitpđcngc vànângcaokinthctrongmơnhcnày Vnidung,bámsátvichươngtrìnhcanhàtrưngvàhthngbàitp cũngđưcbiênsontheocácchươnglýthuyt.Vimichươngsđưcchiathành 4phn: PhnA.Nhclilýthuyt :tĩmttcáckinthccơbn,cácvídvàcác lưuýhuích,cáckinhnghimtrongkhilptrình PhnB.ðbàitp: đưaracácloibàitpkhácnhau,vicácmcđkhác nhau. PhnC.Bàitpmu:HưngdngiimtsbàitiêubiutrongphnB,cĩ phântíchthuttốnvàcàiđtchươngtrình. PhnD.Bàitptgii :ngưihcthchinvicgiicácbàitpnày Mongrngtàiliunàyđápngđưcphnnàonhucucahcsinh,sinh viên. HưngYên,tháng7năm2010 BmơnCơngnghphnmm KhoaCơngnghthơngtin TrưngđihcsưphmkthutHưngYên Trang1
  3. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 MCLC Bài1:CáckháinimcơbncaLýthuytđth 4 Mctiêu 4 a.Nhclilýthuyt 4 b.ðbàitp 4 c.Hưngdngii 5 d.Bàitptgii 6 Bài2:Biudinđthtrênmáytính 9 Mctiêu 9 a.Nhclilýthuyt 9 b.ðbàitp 9 c.Hưngdngii 9 d.Bàitptgii 13 Bài3:ðthEuler 14 Mctiêu 14 a.Nhclilýthuyt 14 b.ðbàitp 15 c.Hưngdngii 15 d.Bàitptgii 18 Bài4:ðthhamilton 19 Mctiêu 19 a.Nhclilýthuyt 19 b.ðbàitp 19 c.Hưngdngii 19 d.Bàitptgii 21 Bài5:Tholuncàiđtđth,cácthuttốnlitkêchutrìnhEulervàHamilton.Tho lunvbàitpln 22 Mctiêu 22 a.Nhclilýthuyt 22 b.ðbàitp 22 c.Hưngdngii 22 d.Bàitptgii 30 Bài6Thuttốntìmkimtrênđthvàngdng 33 Mctiêu 33 a.Nhclilýthuyt 33 b.ðbàitp 33 c.Hưngdngii 33 d.Bàitptgii 50 Bài7:Câyvàcâykhung 51 Mctiêu 51 a.Nhclilýthuyt 51 b.ðbàitp 52 c.Hưngdngii 53 d.Bàitptgii 54 Bài8:Tholunvcàiđtthuttốntìmcâykhungnhnhttrênđth 57 Mctiêu 57 a.Nhclilýthuyt 57 b.ðbàitp 57 c.Hưngdngii 57 d.Bàitptgii 69 Trang2
  4. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài9,10:Bàitốntìmđưngđingnnht 70 Mctiêu 70 a.Nhclilýthuyt 70 b.ðbàitp 70 c.Hưngdngii 72 d.Bàitptgii 91 Bài12:Bàitốnlungccđitrongmng 96 Mctiêu 96 a.Nhclilýthuyt 96 b.ðbàitp 97 c.Hưngdngii 98 d.Bàitptgii 100 Trang3
  5. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài1:CáckháinimcơbncaLýthuytđth Mctiêu Lưutrđưcđthtrênmáytínhtheonhngphươngphápkhácnhau. Càiđtđưcchươngtrìnhchuynđigiacácphươngpháp. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt Haiđnhx,yđưcgilàcpđnhliênthơng,nuhocgiaxvàycĩítnhtmt xíchnivinhau,hoctntiítnhtmtđưngđitysangx. ðthvơhưng G(V,E) đưcgilàđthliênthơng,numicpđnhcanĩ đuliênthơng. ðthcĩhưng G(V,E) đưcgilàđthliênthơngmch,numicpđnhca nĩđuliênthơng. Biudindnghìnhhc:GiscĩđthG(V,E). Biudinđnh:lycácđimtrênmtphnghaytrênkhơnggiantươngng vicácphntcatpVvàdùngngaykýhiucácphntnàyđghitrêncác đimtươngng. Biudincnh:Nucnhavihaiđnhđulàx,ythìnĩđưcbiudin bngđonthnghaymtđoncongnigiahaiđimx,yvàkhơngđiquacác đimtươngngtrongkhơnggian. Biudincung:nucungacĩđnhđulàx,đnhcuilày,thìnĩđưcbiu dinbngmtđonthnghocđoncongđưcđnhhưngđitxsangyvàkhơng quacácđimtươngngtrunggiankhác. HìnhnhnđưcgilàdngbiudinhìnhhccađthG(V,E).ðơikhi ngưitacũnggidngbiudinhìnhhclàmtđth. b.ðbàitp Bài1ChoGđthgm4phnG1,G2,G3vàG4nhưsau: a.Chratpđnh,cnh(vơhưng,cĩhưng,khuyên, )camiđthđãcho?Ch loiđthđĩ? b.ðthG,G1,G2,G3,G4vàG5cĩliênthơngko?Nuđthkoliênthơnghãy chracácthànhphnliênthơng? Trang4
  6. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 c.ðthG,G1,G2,G3,G4vàG5cĩchutrìnhko?Chracácchutrìnhcađth (nucĩ)? 1 2 5 8 00 G4 3 4 6 7 9 G2 G3 G1 c.Hưngdngii Bài1 a. Tênđth TpđnhV TpcnhE Loiđth G1 1,2,3,4 (1,2);(1,4);(2,3);(2,4);(3,4) Vơhưng G2 5,6,7 (5,6);(5,7);(6,7) Cĩhưng G3 8,9 (8,9) Vơhưng G4 0 G 1,2,3,4,5,6,7,8,9,0 (1,2);(1,4);(2,3);(2,4);(3,4); Hnhp (8,9) (5,6);(5,7);(6,7) b. Tênđth Tínhliênthơng Tênthànhphnliênthơng G1 Cĩ G1 G2 Cĩ G2 Trang5
  7. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 G3 Cĩ G3 G4 Cĩ G4 G Khơng G1,G2,G3,G4 c. Tênđth Cĩchutrình? Tênchutrình G1 Cĩ (1,2,4,1);(1,2,3,4,1);(2,3,4,2) G2 Khơng G3 Khơng G4 Khơng G Cĩ (1,2,4,1);(1,2,3,4,1);(2,3,4,2) d.Bàitptgii Bài1. Mtqunđocĩn(n )hịnđovàhaihịnđobtkìthucqunđođu cĩsđumiđưngngmtimttrongnhưnghịnđonyđunhhơnn.Chng minhrngtmthịnđotùyýthucqunđotacĩthđiđnmthịnđobtkì kháccaqunđobngđưngngm. Bài2 Khivnghhèmibnhcsinhcalp11AtrưngLêHngPhongđu traođiđachviítnhtmtnasbntronglp.Chngminhrngtrongthi giannghhèmibncalp11Ađucĩthbáotintrctiphaygiántipchocác bntronglp. Bài3 Trongmtcuchpcĩđúnghaiđibiukhơngquenhauvàmiđibiunày cĩmtslngưiqueđnd.Chngminhrngluơnluơncĩthxpmtsđi bieetrngichengiahaiđibinĩitrên,đngưingigiahaingưimàanh( ch)taquen. Hưngđn: Trang6
  8. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ðgiiđưcbàitốntrêntrưchttaxâydngcácđthtươngng,sauđĩvn dngktqucađnhlý4.1,hqu4.1vàđnhlý4.2màsuyraktlun. Xuâydngđth • ðnh:Lycácđimtrongmtphnghaytrongkhơnggiantươngngvicác hịnđothucqunđo(cácbnhcsinhtronglp11A,cácđibiuđn hp). • Cnh:Haiđimx,yđưcnibngmtcnhkhivàchkhihaihịnđox,y cĩđưngngmtrctipvinhau(cácbnx,ytraođiđachchonhau,các đibiux,yquennhau) ðthnhânđưckýhiubng G1 ,( G2 ,G 3) ðthG1 mơttồnblưiđưngngmtrongqunđo ðthG2 mơttồnbquanhtraođiđachtronglp11A ðthG3 mơttồnbquenbittrongcácđibiutrongcácđibiuđn dhp. Vndngktqucácđnhlýđsuyraktlun Dohaihịnđobtkìđucĩtngsđumiđưngngmkhơngnhhơnn,nên haiđnhbtkìcađthG1 đucĩtngbckhơngnhhơnn.Bivytheođnhlý 4.1.đthG1 liênthơng,nênhaihịnđobtkìcĩđưnghmnivinhau. Vìmibnhcsinhtronglp11Atraođiđachviítnhtmtnasbntron lp,nênbccamiđnhca G2 khơngnhhơnmtnasđnhcađth.Khiđĩ ,theohqu4.1.đthG2 liênthơng.Bivyhaiđnhx,yđucĩxích nivi nhau.Khiđĩthơngquacácbntươngngvicácđnhthucxích ,màbntương ngviđnhxbáotinđưcchotươngngviđnhyvàngưcli. Haiđibiukhơngquennhau,thìhaiđnhtươngngkhơngknhau.Miđibiu nàylicĩmtslngưiquenđnhp,nêntrongđthliênthơng G3 cĩđúnghai đnhbclvàhaiđnhnàylikhơngknhau.Khidĩ,theođnhlý4.2,haiđnhnày liênthơngnêncĩítnhtmtxichnigiahaiđnhnày.Gis làmttrong nhngmixíchnigiahaibclnày.Davào taspxpcácđibiutương ngngigiahaingưimàanhchquen. Bài4ChoGđthnhưsau: Chratpđnh,cnh(vơhưng,cĩhưng,khuyên, )camiđthđãcho?Ch loiđthđĩ?ðthcĩliênthơngko?Nuđthkoliênthơnghãychracác Trang7
  9. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 thànhphnliênthơng?ðthcĩchutrìnhko?Chracácchutrìnhcađth(nu cĩ)? Trang8
  10. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài2:Biudinđthtrênmáytính Mctiêu Nêuđưccáccáchbiudinđthvàbiudinđthtrênmáytínhtrênmáytính. ðưarađưcmatrnk,danhsáchcáccnh,cungtươngngvi1đthcho trưc. Lưutrđưcđthtrênmáytínhtheonhngphươngphápkhácnhau. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt b.ðbàitp Bài1 ChoGđthgm4phnG1,G2,G3vàG4nhưsau: 1 2 5 8 00 G4 3 4 6 7 9 G2 G3 G1 a.BiudincácđthG,G1,G2,G3,G4dưidngmatrnk b.BiudincácđthG,G1,G2,G3,G4dưidngdanhsáchcnh(cung) c.BiudincácđthG,G1,G2,G3,G4dưidngdanhsáchk Bài2 Càiđtchươngtrìnhnhpdanhsáchkcađthtbànphímvàđưadanh sáchđĩramànhình. c.Hưngdngii Bài1 Trang9
  11. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Tênđth a.matrnk b.danhsách c.danhsáchk cnh(cung) G1 1234 Danhsáchcnh 124 1 0101 12 214 2 1001 14 34 3 0001 23 4123 4 1110 24 34 G2 567 Danhsáchcung 567 5 001 56 67 6 101 57 7 000 67 G3 89 Danhsáchcnh 89 8 01 89 98 9 10 G4 0 0 0 G 1234567890 Danhsáchcung 124 1 0101000000 12 214 2 1001000000 14 34 3 0001000000 21 4123 4 1110000000 23 567 5 0000001000 24 67 Trang10
  12. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 6 0000101000 32 89 7 0000000000 34 98 8 0000000010 41 0 9 0000000100 42 0 0000000000 43 56 57 67 Bài2Chươngtrìnhnhpdanhsáchkcađthtbànphímvàđưadanhsáchđĩ ramànhình Phântíchbàitốn : Trongrtnhiuthuttốnlàmvicviđthchúngtathưngxuyênphithchin cácthaotác:Thêmhocbtmtscnh.Trongtrưnghpnày Cutrúcdliu dùngtrênlàkhơngthuntin.Khiđĩnênchuynsangsdngdanhsáchkliên kt(LinkedAdjancencyList)nhưmơttrongchươngtrìnhnhpdanhsáchkca đthtbànphímvàđưadanhsáchđĩramànhình Chươngtrìnhminhha : ProgramAdjList; Const maxV=100; Type link=^node; node=record Trang11
  13. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 v:integer; next:link; End; Var j,x,y,m,n,u,v:integer; t:link; Ke:array[1..Vmax]oflink; Begin Write(‘Chosocanhvadinhcuadothi:’);readln(m,n); (*Khoitao*) forj:=1tondoKe[j]:=nil; forj:=1tomdo begin write(‘Chodinhdauvacuoicuacanh‘,j,’:’); readln(x,y); new(t);t^.v:=x,t^.next:=Ke[y];Ke[y]:=t; new(t);t^.v:=y,t^.next:=Ke[x];Ke[x]:=t; end; writeln(‘Danhsachkecuacacdinhcuadothi:’); forJ:=1tomdo begin writeln(‘Danhsachcacdinhkecuadinh‘,j,’:’); t:=Ke[j]; Trang12
  14. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 whilet^.next<>nildo begin write(t^.v:4); t:=t^.next; end; end; readln; End. d.Bàitptgii Trang13
  15. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài3:ðthEuler Mctiêu Kimtrađưcmtđthbtkỳcĩlàđtheulerhaykhơng. ÁpdngđưcthuttốntìmchutrìnhEuler,đưngEuler,vi1đthchotrưc. Lưutrđưcđthtrênmáytínhtheonhngphươngphápkhácnhau.Càiđt đưcchươngtrìnhchuynđigiacácphươngpháp. CàiđtđưcthuttốnTìmchutrìnhEuler. Càiđtđưcthuttốnduyêtđthduyttheochiusâuhocduyttheochiu rng. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt Chutrình(t.ư.đưngđi)đơnchattccáccnh(hoccung)cađth(vơ hưnghoccĩhưng)Gđưcgilàchutrình(t.ư.đưngđi)Euler.Mtđth liênthơng(liênthơngyuđiviđthcĩhưng)cĩchamtchutrình(t.ư. đưngđi)EulerđưcgilàđthEuler(t.ư.naEuler) . Trang14
  16. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ðnhlý ðth(vơhưng)liênthơngGlàđthEulerkhivàchkhimiđnhcaGđucĩ bcchn. Hqu ðthliênthơngGlànaEuler(màkhơnglàEuler)khivàchkhicĩđúnghai đnhbcltrongG. ThuttốnvchđưcmtchutrìnhEulertrongđthliênthơngGcĩbccami đnhlàchntheothuttốnFleurysauđây. XutpháttmtđnhbtkỳcaGvàtuântheohaiquytcsau: 1.Mikhiđiquamtcnhnàothìxốnĩđi;sauđĩxốđnhcơlp(nucĩ); 2.Khơngbaogiđiquamtcu,trphikhơngcịncáchđinàokhác. b.ðbàitp Bài1:ðthsaucĩlàđthnaEulerhayđthEulerko?Giithích? c.Hưngdngii Bài1:ðthsaucĩlàđthnaEulerhayđthEulerko?Giithích? Trang15
  17. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 b c a e d G1 ðthG1làđthnaEuler Thtvây,cácđnha,b,ecĩbclà2,4,4làbcchn,cácđnhcvàdcĩbclà3là bcl a b d c G2 ðthG2làđthnaEuler Thtvây,cácđnhcvàdcĩbclà2làbcchn,cácđnhavàccĩbclà1làbc l Trang16
  18. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 a b e d c f g G3 ðthG3khơnglàđthEuler ThtvyG3cĩ3đnha,dvàgcĩbclà1làbcl 1 5 2 4 3 G4 ðthG4làđthnaEulervìtheohqu Thtvây,cácđnh3,4,5cĩbclà2làbcchn,cácđnh1và2cĩbclà3làbcl Bài2 Trang17
  19. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Xutpháttu,tacĩthđitheocnh(u,v)hoc(u,x),gislà(u,v)(xố (u,v)).Tvcĩthđiquamttrongcáccnh(v,w),(v,x),(v,t),gis(v,w)(xố (v,w)).Tiptc,cĩthđitheomttrongcáccnh(w,s),(w,y),(w,z),gis(w,s) (xố(w,s)).ðitheocnh(s,y)(xố(s,y)vàs).Vì(y,x)làcunêncĩthđitheomt tronghaicnh(y,w),(y,z),gis(y,w)(xố(y,w)).ðitheo(w,z)(xố(w,z)vàw) vàtheo(z,y)(xố(z,y)vàz).Tiptcđitheocnh(y,x)(xố(y,x)vày).Vì(x,u)là cunênđitheocnh(x,v)hoc(x,t),gis(x,v)(xố(x,v)).Tiptcđitheocnh (v,t)(xố(v,t)vàv),theocnh(t,x)(xốcnh(t,x)vàt),cuicungđitheocnh (x,u)(xố(x,u),xvàu). d.Bàitptgii Trang18
  20. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài4:ðthhamilton Mctiêu KimtrađưcmtđthbtkỳcĩlàđthHamiltonhaykhơng. ÁpdngđưcthuttốntìmchutrìnhHamilton,đưngHamilton,vi1đth chotrưc. Lưutrđưcđthtrênmáytínhtheonhngphươngphápkhácnhau.Càiđt đưcchươngtrìnhchuynđigiacácphươngpháp. CàiđtđưcthuttốnTìmchutrìnhHalmiton. Càiđtđưcthuttốnduyêtđthduyttheochiusâuhocduyttheochiu rng. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt ðthHamilton(naHamilton)làđthcĩchamtchutrình(đưngđi) Hamilton Hay ðưngđi(x[1],x[2], ,x[n])đưcgilàđưngđiHamiltonnux[i]≠x[j] (1≤i<j≤n) Chutrình(x[1],x[2], ,x[n],x[1])đưcgilàchutrìnhHamiltonnu x[i]≠x[j](1≤i<j≤n) Note!Chotinay,vnchưatìmraphươngphápviđphctpđathcđtìmchu trìnhcũngnhưđưngđiHamiltontrongtrưnghpđthtngquát. CĩthsdngthuttốnquayluiđlitkêchutrìnhHamilton b.ðbàitp Bài1:ðthsaucĩlàđthnaHamiltonhayđthHamiltonko?Giithích? c.Hưngdngii Bài1:ðthsaucĩlàđthnaHamiltonhayđthHamiltonko?Giithích? Trang19
  21. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 b c a e d G1 ðthG1làđthHamilton a b d c G2 ðthG2làđthnaHamilton a b e d c f g G3 ðthG3khơngcĩchutrìnhhayđưngđiHamilton Trang20
  22. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 1 5 2 4 3 G4 ðthG4làđthHamilton,vìcĩchutrìnhHamilton(1,3,5,2,4,1) d.Bàitptgii Trang21
  23. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài5:Tholuncàiđtđth,cácthuttốnlitkêchutrìnhEulervà Hamilton.Tholunvbàitpln Mctiêu Lưutrđưcđthtrênmáytínhtheonhngphươngphápkhácnhau. Chuynđigiacáckiubiudinđthtrênmáytính. Nângcaokhnănglàmvicnhĩm. Rènluyntưduysángto. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt Xemlitrongbài3vàbài4 b.ðbàitp Bài1TìmchutrìnhEulertrongđthG. Bài2TìmchutrìnhHalmitontrongđthG. c.Hưngdngii Bài1ðbài :CàiđtchươngtrìnhtìmchutrìnhEulertrongđthG. ChođthG=(X,E)tntichutrìnhEuler.Hãytìmchutrình(chitrìnhEulerlà chutrìnhđiquattccáccnhcađth,micnhđiquađúngmtln). Phântíchbàitốn : ðuvào: ðthG ðura:ChutrìnhEuler(nucĩ) 2.Thuttốn: Xutpháttmtđnhubtkỳ,khiđiquacnhnàothìxốcnhđĩkhiđthvà ghilittráisangphi.Khithchinthuttốncnlưuýnugpcnhbccu gia2thànhphnliênthơngthìtaphixốhtthànhphnliênthơngrimixố đncnhbccu. Trang22
  24. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Khixốcnhbccuthìphiloihtcácđnhtrơtri(nghĩalàkhơngkvibtc đnhnàothucđth). Cutrúcdliu: Biudinđthbngmatrnka(i,j),dođĩlưuýkhixốđimtcnhtachvic gána(i,j)=a(j,i)=0,đngthiphilưucnhvaxốvàomtmngkhác:MngCtr. Mnglt:array[1 Nmax]ofintegerdùngtrongthtctìmthànhphnliênthơng (gingnhưmtthuttốntìmthànhphnliênthơngtrìnhbàytrên). Mngdd:array[1 Nmax]ofBoolean,giátrdd[i]chobitđnhibloikhiđ thhaychưa.Nublithìdd[i]=True;ngưclidd[i]=False; Thtc ProcedureEuler_Cycle; Begin STACK:= ∅;CE:= ∅; Chonulamotdinhnaodocuadothi; STACK ←u; WhileSTACK ∅then Begin Y:=dinhdautientrongdanhsachKe(x); STACK ←y; (*loaibocanh(x,y)khoidothi*) Ke(x):=Ke(x)\{y}; Ke(y):=Ke(y)\{x}; Trang23
  25. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 End Else Begin x⇐STACK;CE ⇐x; End; End; End; Chươngtrìnhminhha : Program Chu_trinh_Euler; ConstNmax=100; Emax=100; Vara:array[1 Nmax,1 Nmax]ofinteger; Ctr:array[1 Emax,1,2]ofinteger; dd:array[1 Nmax]ofBoolean; lt:array[1 Nmax]ofinteger; SolC,N:integer; (*BinSolclàscnhcachutrình,stănglênmtđơnvmikhitađiqua mtcnh*). Program Timtplt(k :integer) ; (*Thtcnàytìmthànhphnliênthơnggingnhưthuttốntìnhthànhphn liênthơngtrìnhbàytrênchkhácmtđimlàtachtìmtpltđivicácđnhchưa bloikhiđth*). Vari:integer; Beginlt[k]:=sotp; Trang24
  26. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Fori=1toNdo Ifdd[i]and(lt[i]=0)and(a[i,k]=1)then Begin lt[i]:=sotp; Timtplt(i); End; End; Function KTLT (u,v:integer):Boolean; (*Hàmnàykimtraxemkhitaxốcnh(u,v)đithìđthcịnliênthơngnahay khơng?Nucịnthìstpltluơnbng1.ðâycoinhưkimtracnh(u,v)cĩphilà cnhbccuhaykhơng*). Vari:integer; Begin(*ðutiêntaphixốcnh(u,v)khiđthrimitinhànhkim tra*). a[u,v]:=0;a[u,v]:=0; Fillchar(lt,sizeof(lt),0); (*ðonmãsautìmstpltcađthđimđangxét*). Sotp:=0; Fori=1toNdo Ifdd[i]and(lt[i]=0)then Begin inc(sotp); Timtplt (i); End; Trang25
  27. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Ifsotp=1thenKTLT=True Else Bengin( *nukhơngcĩcnhbccuthìkhikhơiphc licnh(u,v)*). a[u,v]:=1 a[v,u]:=1 KTLT:=False End; End; Procedure Timchutrinh ; Vari,u,dem:integer; Beginsolc:=0; u:=1; (*Chutrìnhcataxutpháttđnh1,tuynhiênđiunàykhơngbtbuc*) Fori=1toNdo dd[i]true; (*Khitottccácgiátrdd[i]=Truenghĩalàchưacĩđnhnàob loi*) REPEAT Dem:=0; (*Binđmlàscnhkviđnhu*) Begin Fori=1toNdo Ifa[u,i]=1then Trang26
  28. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Begin (*xốcnh(u,i)khiđth*) a[u,i]:=0 a[i,u]:=0 (*Loiđnhukhiđth*) dd[u]:=False; (*ðuacnh(u,i)vàochutrình*). inc(solC); Ctr[solC,1]:=u; Ctr[solC,2]:=i; Break; End; End Else (*Ngưclinucịnnhiucnhniviutatìmmtcnhkhơngphilàcnh bccuvàxốcnhđĩđngthiđưanĩvàochutrình*) Ifdem>1then Begin Fori=1toNdo If(a[u,i]=1anddd[i]and KTLT (u,i)then (*Nucnh(u,i)thomãnkhơngphilàcnhbccuthìtachn: Nghĩa lànĩphikviu,chưabloikhiđthvàsaukhixốcnhkđĩ thìđthvnliênthơng.Riêngđiukinth3tadùnghàmKTLT(u,i)đ kimtraxemkhixáocnh(u,i)đithìđthcịnliênthơngnahaykhơng*). Begin (*ðonmãsauxốcnh(u,i)vàđưacnhnày Trang27
  29. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 vàochutrình*). a[u,i]:=0 a[i,u]:=0 inc(solC); Ctr[solC,1]:=u; Ctr[solC,2]:=i; Break; (*SaukhitìmđưcđnhithìtaphithốtkhivịnglpFornukhơngcĩ lnhBreakthìchươngtrìnhschysai*). End; End; (*Chunbchophéptipchutrìnhcachúngtalixutpháttđnh*) u:=1; UNTILdem=0; End; ProcedureGhifile; Varf:text; I:integer; Begin Assign(f,’kq.out’);Rewrite(f); Fori:=1tosolCdo writeln(f,Ctr[i,1],’‘,Ctr[i,2]); Close(f); BEGIN Trang28
  30. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Docfile; Timchutrinh; Ghifile; END. Bài2ðbài :LitkêttccácchutrìnhHamiltoncađth Phântíchbàitốn : Thuttốnsauđâyđưcxâydngdatrêncơsthuttốnquayluichophéplit kêttccácchutrìnhHamiltoncađth. Hìnhdưiđâymơtcâytìmkimtheothuttốnvamơt. ðthvàcâylitkêchutrìnhHamiltoncanĩtheothuttốnquaylui. Trongtrưnghpđthcĩkhơngquánhiucnhthuttốntrêncĩthsdngđ kimtrađthcĩphilàHamiltonhaykhơng. Chươngtrìnhminhha : ProcedureHamilton(k); (*lietkecacchutrinhHamiltonthuduocbangviecp hattriendaydinh(X[1],... ,X[k1])cuadothiG=(V,E)choboidanhsachke:Ke(v),v ∈V*) begin Trang29
  31. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 fory ∈Ke(X[k1])do if(k=N+1)and(y=v0)thenGhinhan(X[1],...,X[n],v0) else ifChuaxet[y]then begin X[k]:=y; Chuaxet[y]:=false; Hamilton(k+1); Chuaxet[y]:=true; end; end; (*Mainprogram*) begin forv ∈VdoChuaxet[v]:=true; X[1]:=0;(*v0lamotdinhnaodocuadothi*) Chuaxet[v0]:=false; Hamilton(2); end. d.Bàitptgii Bàitp1:Hinghbàntrịn TngthưkýðihiđngLiênhpquctriutpmtcuchpcĩNnhà ngoigiaocaNtchcthamgia.Cácđidinngoigiaođưcbtríngiquanh mtbàntrịn.Giamtstchccĩquanhcăngthng,vìvykhơngthxph Trang30
  32. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ngicnhnhauđưc.Thơngtinvquanhgiacáctchcđưcchodưidng cpsnguyêni,jnugia2tchcnàycĩquanhcăngthng. HãylptrìnhgiúpTngthưkýLiênhpqucbtríchngiquanhbànhp.Các tchcđưcđánhst1tiN,0<N<=500. Dliuvào: tfileCONF.INP,dịngđutiênchasnguyênN,cácdịng sau,midịng mt cp s i, j chobitcác đidinivàjkhơngngicnhnhau đưc.Ktthúclàmtdịngcha2s0. Ktqu:đưarafileCONF.OUT.Nukhơngcĩcáchbtríthamãnyêu cuthìđưarathơngbáoKHONGCO,trongtrưnghpngưcli–đưaradãyN snguyênxácđnhvtríaingicnhaiquanhbàntrịn. Víd: CONF.INPCONF.OUT 111974115821036 14 17 57 107 108 109 34 00 Bàitp2:Kimtrađưng Mttrmqungđưnggiaothơngphichutráchnhiêmvtìnhtrngca mtmnglưigiaothơngnigiacácđimdâncư.Hàngtháng,hphicmt điđikimtramtvịngquakhpmnglưiđxemxéttìnhtrnghinthica cácđưnggiaothơngnhmbáosachakpthinucĩnhucu.Hãyvitchương trìnhnhpvàomnglưigiaothơngvàgiúptrmquytđnhltrìnhcađikim trasaochocĩththămttccácconđưngmàtngchiudàiđonđưngđiqua lànhnht. Bàitp3:Mãđitun Hãycàiđtchươngtrìnhxácđnhltrìnhcaconmãtrênbànc8x8ơbt đutơ(i,j)điquattccácơcabàncvàmiơch1lnduynht. MrngvitrưnghpbànckíchthưcNxN. Bàitp4:Hinghbàntrịn Cĩ12ngưingichung1bàntictrịn.Mingưicĩítnht6ngưiquen. Hãychracáchspxpsaochomingưiđungicnhngưimìnhquen.Tng Trang31
  33. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 quát,hãyspNngưingichungquanhbàntrịnsaochomingưiđungicnh ngưimìnhquen.Bitmingưicĩítnht(N+1)/2ngưiquen. Trang32
  34. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài6Thuttốntìmkimtrênđthvàngdng Mctiêu Trìnhbàyđưcýtưng,cáchcàiđtvàcàiđtđưcthuttốnBFS,DFS. Nêuưunhưccatngthuttốnđivitngloiđth. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. Rènluyntưduysángto. a.Nhclilýthuyt b.ðbàitp Bài1 Dùngcâyđmơtktquduytchiusâuvàduyttheochiurngtrênđ thsau: Bài2 ChođthG=(X,E)vitpcácđnhXvàtpcáccungE.Xétxemđthcĩ baonhiêuthànhphnliênthơng,mithànhphnliênthơngbaogmnhngđnh nào? Bài3 Thuttốntìmđưngđitheochiusâu(thuttốnduyttheochiusâu) Bài4 Thuttốntìmđưngđitheochiurng(thuttốnduyttheochiurng) c.Hưngdngii Bài1 Dùngcâyđmơtktquduytchiusâuvàduyttheochiurngtrênđ thsau: Trang33
  35. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Duytrng Duytsâu: Bài2 Thuttốntìmsthànhphnliênthơng ChođthG=(X,E)vitpcácđnhXvàtpcáccungE.Xétxemđthcĩ baonhiêuthànhphnliênthơng,mithànhphnliênthơngbaogmnhngđnh nào? Phântíchbàitốn : 3 5 Trang34
  36. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 82 63 1 2 27 92 1 1 31 41 ðthvicácthànhphnLT ðuvào: a.Biudinđthbngmatrnk Dothi.txt Kq.txt 9 Sotphcuadothila:3 011100000 TPLT1baogomcacdinh:1234 101000000 TPLT2baogomcacdinh:58 110100000 TPLT3baogomcacdinh:679 101000000 000000010 000000101 Trang35
  37. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 000001001 000010000 000001100 Cutrúcdliu ðutiênđánhscácđnhlà0 (Dùngmtmngbiudincácthànhphnlàmngchúngtacntìm,banđu tagánttccácgiátrcamngbng0) LyrađnhLgánlt[i]:=1 +Duytcácđnhkca1gpđnhtiptheolàđnh2chưađưcđánhsta đánhs1gánlt[2]:=1sangbưctiptheo. +Duytcácđnhkca2,gpđnh1đưcđánhsrinênbqua,gpđnh chưađánhsnênđánhs1,gánlt[4]:=1sangbưctiptheo. +Duytcácđnhkca4,gpđnh1đánhsrinênbqua.Gpđnh2đánh srinênbqua.Gpđnh3chưađánhsnênđánhs1,lt[3]:=1sangbưctip theo. +Duytcácđnhkca3gptồncácđnhđánhsrinênkhơngđánhs nadngvicđánhs. Nhưvytađãtìmđưc1thànhphnliênthơng. Lyramtđnhchưađánhsvídtalyđnh6 Talilàmnhưtrêntalitìmđưcthànhphnliênthơngkhác. Nhưvytarútrađưc Cutrúcdliucabàitốnnày. ðiviđthvàcáccnhthìtacĩthdùngmatrnkhocdanhsáchk,và nênđctfileđđơnginhố. Dùngmtmnglt[1 n]biudinTPLTlt[i]:=Knuđnhithucthànhphn liênthơng. Chươngtrìnhminhha : Trang36
  38. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 a.Biudinđthbngmatrnk. a(i,j)=1nu2đnhivàjknhauvà=0nu2đnhivàjkhơngknhau. Programtim_thanh_phan_lien_thong; ConstNmax=100; Typemang=array[1 Nmax]ofinteger; Varlt:mang; a:array[1 Nmax,1 Nmax]ofbyte; N:integer; Sotp:integer; (*Thtcnàyđctfiledothi.txtsNlàsđnhcađthmatrnkbiudinđ th*) ProcedureDocfile; Vari,j:integer; f:text; Begin Assign(f,’dothi.txt’);reset(f); Readln(f,N); Fori:=1toNdo Read(f,a[i,j]); Close(f); End; (*Thtcđquynàydùngđtìmcácđnhthucmtthànhphnliênthơng*) ProcedureDocfile; Vari,j:integer; Trang37
  39. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Beginlt[k]:=sotp; (*Duytquacácđnhcađth*) Fori:=1toNdo (*Nuđnhikvikvàchưađánhduthìtagithtcđquy.Tìm LTnghĩalàliđánhduvàduytcácđnhkcai*) lf(lt[i]=0)and(a[i,k]=1)then TimLT(i); End; (*Thtcnàyđưccoinhưbưc2trongvd*) ProcedureTimTPLT; Vari:integer; Beginsotp:=0; (*Duytcácđnhchưađưcđánhdu*) Fori:=1toNdo (*Nucĩmtđnhchưathucthànhphnliênthơngnàolt[i]=0nghĩa làtìmramtthànhphnminêntatăngslưngthànhphnvàbtđutađi tìmthànhphnliênthơngmiđĩbngthtcđquyTimLT(i)*) lflt[i]=0then Begin Inc(sotp); TimLT(i); End; End; (*Thtcinracácthànhphnliênthơngcađth*) Trang38
  40. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ProcedureGhifile; Vari,j:integer; Begin Writeln(‘sothanhphanlienthongcuadothil:;sotp); Fori:=1tosotpdo Begin Writeln(‘TPLT’,i,’baogomcacdinh:’); Forj:=1toNdo (*nujthucthànhphnliênthơngthithìinra*) lflt[j]=ithen Write(J,’‘); Writeln; End; Readln; End; BEGIN Docfile; TimTPLT; Ghifile; END. b.Biudinđthbngdanhsáchcnh Matrncachúngta(vídtrên)đưcvitdưidng: 2 3 4 9 Trang39
  41. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 1 3 0 1234 240 213 130 324 800 413 7 9 0 58 69 0 679 500 769 6 7 0 85 967 a[i,9]làslưngcácđnhkviđnhi; a[i,j]chínhlàcácđnhkvicácđnhi(j=1,2,3, ) KhiđĩthtcDocfileđưcvitlinhưsau: ProcedureDocfile; Vari,j,t:integer; f:text; BeginAssign(f,’dothi.txt’);reset(f); Readln(f,N); Fori:=1tosotpdo Bengin Read(f,t); Whilenoteoln(f)do Begin Read(f,t); Trang40
  42. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Inc(j); a[i,j]:=t; End; a[i,0]:=j; End; Close(f); End; ThtcGhifilevàthuctcTimTPLTkhơngcĩgìthayđi ThtcTimTPLTthayđinhưsau: ProcedureTimLT(k:integer); Vari:integer; Begin Lt[k]:=sotp; Fori:=1toa[k,0]do Iflt[a[k,i]]=0then TimLT(a[k,i]); End; Bài3 ðbài :Thuttốntìmđưngđitheochiusâu(thuttốnduyttheochiu sâu).TìmđưngđigiahaiđnhxpvàkttrênđthGvơhưngvàkhơngcĩtrng s. Phântíchbàitốn : Trang41
  43. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Thuttốncabàitốnnàycũnggingnhưthuttốntìmthànhphnliên thơngcađth.Trongphn Cutrúcdliucĩdùngmngtrưcđlưuđưngđi tđnhxpđnđnhkt. Chươngtrìnhminhha : ProgramDuyetchieusau; ConstNmax=100; TypeMang=array[1 Nmax]ofinteger; Matran=array[1 Nmax,1 Nmax]ofinteger; Vara:Matran; so,duong:mang; N:integer; (*thtcđctpvàghitpgingnhưbàitrưcchđcthêmhaiđnhxpvàkt *) ProcedureDuyet(k:integer); Vari:integer; Begin Fori:=1toNdo (*Duytcácđnhkvik*) lf(a[i,k]=1)and(truoc[i]=0)then Begin(*tagánđnhđãđitrưcđnhilàđnhk*) Truoc[i]:=k; Duyet(i); End; End; Trang42
  44. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ProcedureDuyetsau; Vari:integer; Begin Fori:=1toNdotruoc[i]:=0 Truoc[xp]:=1; Duyet(xp); End; ProcedureTimduong; (*thtcnàygingthtctìmngưctrongduytchiurng,nhưngchtìm mtđưngđingnnhttrongrtnhiuđưngđingnnhttxpđnkt*). Var i,u:integer; Begin sold:=0; u:=kt; REPEAT Inc(sold); Duong[sold]:=u; U:=truoc[u]; UNTILu=1; End; BEGIN Doctiep; Duyetsau; Timduong; Trang43
  45. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Ghitep; END. Bài4ðbài :Thuttốntìmđưngđitheochiurng(thuttốnduyttheochiu rng).ChođthvơhưngG=(X,E).Hãytìmđưngđingnnhtgia2đnhxpvà ktchotrưc(đưngđingnnhtlàxíchcĩ2đulàxpvàktvàđiquaítcunghoc ítđnhnht). Phântíchbàitốn Sdnghàngđiđgiiquytbàitốnnày.Cáchđưamtđnhcađthvà ly1đnhrasdngphituântheomtquytcnhtđnh. Sdngmtmngđánhduđưngđitruoc:array[1 Nmax]ofinteger Khiđitđnhxpmàmuncĩđưngđingnnhtđnuthìtaphiquađnh truoc [u],muncĩđưngđingnnhtđntruoc[u]thìtaphiđiqua truoc [ truoc [u]], Yêucu:Sauthtcduyttheochiurngthìtaphitìmđưcmng truoc. Khitogiátrbanđucamng truoc bng0. B1:Khitohàngđi. ðưaxpvàohàngđi.Gán truoc [xp]:=1 B2:REPEAT Ly1đnhrakhihàngđi.Gisđnhu. Duytnhngđnhkviu,gisduytđnđnhv. Nutrưc[v]=0thìtađưavvàohàngđiđngthigántruoc[v]:=u. Nghĩalàmunđiquavthìphiđiquađnhtrưcđĩlàu; B3:Kimtravcĩphilàkthaykhơng,nucĩthìthốtkhithtc; Nutruoc[v] 0 Trang44
  46. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Hàngđirngnghĩalàkhơngcịnđnhnàotronghàngđi. Trênđâylàsưncathtcduytchiurng,nusaunhngbưcnàymà truoc[kt]=0nghĩalàkhơngtntiđưngđitxpđnkt. B4:(Timđưngđithơngquamng truoc) Dùngmtmng duong :array[1 Nmax]ofintegerđbiudincácđnhnm trênđưngđi.Mngnàythhinđưngđingưctktvxp.Dođĩkhiinktqu ramànhìnhtaphiinngưctcuimng. Khiđuu:=kt; sold:=0(slưngđnhtrênđưngđikhiđubng0) REPEAT Tăngsoldlên1đơnv gán duong [sold]:=u; đingưclibưctrưcu:=truoc[u]; UNILTu=1 B5:Inktqu. Thuttốnhơikhĩhiu.Bnsthyrõtrongphncàiđtchươngtrình. Cutrúcdliu Mng2chiua(ij)biudinmatrnliênthuccácđnhvàcáccungcađ th. Mng truoc vàmng duong mơtnhưtrên. Mngq(quene)mơtcutrúccahàngđi. Thtc ProgramDuyet_chieu_rong; ConstNmax=100; Typemang=array[1 Nmax]ofinteger; Trang45
  47. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Var q,truoc,duong:mang; A:array[1 Nmax,1 Nmax]ofbyte; Sold;N,xp,kt,qf,ql:integer; (*qfqueuefirstlàconchyđuhàngđi qlqueuelastlàconchycuihàngđi*) Chươngtrìnhminhha : Procedure Docfile; Varij:integer; f:text; Begin Assign(f,‘dothi.txt’);reset(f); Readln(f,N); Fori:=1toNdo Forj:=1toNdo Read(f,a[ij]); Close(f); Readln(f,xp,kt); End; (*Thtckhiđnghàngđi*); ProcedureInitQ; Begin ql:=1 qf:=0 Trang46
  48. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 End; (*Thtcđưamtđnhvàocuihàngđi*) PrcedurePut(k:integer); Begin q[ql]:=k; inc(ql); End; (*Hàmlymtđnhrakhihàngđi–lyđuhàngđi*) FunctionGet:integer; Begin Get:=q[qf]; inc(qf); End; (*Hàmkimtrahàngđirnghaykhơng*) FunctionQempty:Boolean; Begin Qempty:=(qf>ql); End; (*Thtcduytchiurng*) ProcedureDuyetCR; Trang47
  49. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Varv,u:integer; Begin InitQ ; Put (xp; Truoc [xp]:=1; REPEAT U:=Get; (Duytcácđnhkcau*) Forv:=1toNdo If(a[u,v]=1and(truoc[v]=0)then Beign (*Nuvkviuvàchưađiquathìđánhduvàđưavvàohàngđi*) Truoc[v]:=u; Put(v); End; UNILT Qempty or(truoc[kt]<>0); End; (*Thtctìmmngđưngđitxpđnktdngngưc*) Procedure Timduong ; Varu:integer; Beginsold:=0; u:=kt; REPEAT Trang48
  50. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 inc(sold); Duong[sold]:=u; u:=truoc[u]: UNILTu=xp; End; (*Thtcinktquramànhình*) Procedure Inkq ; Vari:integer; Begin Iftruoc[kt]=0then Writeln(‘khongcoduongditư‘,xp,‘den’,kt) else BeginWriteln(‘Duongditư‘,xp,‘den’,kt); (*Khiinphiinngưcmngđưngtsoldtrv1*) Fori:=solddownto1do Write(duong[i],‘‘); End; Realn; End; BEGIN Docfile; Trang49
  51. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 DuyetCR; (*Chcchnrngnucĩđưngđiđnđnhktthìtamitìmmngđưng*) Iftruoc[kt]<>0then Timduong; Inkq; END. d.Bàitptgii Trang50
  52. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài7:Câyvàcâykhung Mctiêu Mctiêucabàinàyngưihccĩkhnăng:Xácđnhđưcmtđưngđi,mt chutrìnhtrongđthbtkỳ. Biudinđthtrênmáytínhbngcácphươngphápkhácnhau. ÁpdngđưcthuttốnKruskalvàPrimđtìmcâykhungnhnhtngvimt đthxácđnh.Càiđtđưcthuttốn. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt Cácđnhnghĩa:đth,cnh,cung,đnhk,cây,câykhung. Cácphươngphápbindinđthtrênmáytính ðnhlý3.4.2: ChoTlàmtđthcĩn ≥2đnh.Cácđiusaulàtươngđương: 1) Tlàmtcây. 2) Tliênthơngvàcĩn −1cnh. 3) Tkhơngchachutrìnhvàcĩn −1cnh. 4) Tliênthơngvàmicnhlàcu. 5) GiahaiđnhphânbitbtkỳcaTluơncĩduynhtmtđưngđisơcp. 6) Tkhơngchachutrìnhnhưngkhithêmmtcnhmithìcĩđưcmtchu trìnhduynht. Bàitốncâykhungnhnht ThuttốnKruskalviýtưng“chndn” B1:Chncnhtrngsnhnht B2:Chncnhtrngsnhnhttrongcáccnhcịnli B3:Chncnhtrngsnhnhttrongcáccnhcịnli,màkotothànhchu trình. Trang51
  53. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Lplibưc3chotikhichnđưcn1cnh. ThuttốnPrimviýtưng“lanta”.GislantatđnhA B1:ChncnhtrngsnhnhtthucA(tccĩ1đulàđnhA) Gislàcnh(A,B) B2:ChncnhtrngsnhnhttrongcáccnhcịnlithucAhocB(tccĩ 1đulàđnhAhocB).Gislàcnh(C,B)hoc(C,A) B3:ChncnhtrngsnhnhttrongcáccnhcịnlithucAhocBhoc C,màkotothànhchutrình. Lplibưc3chotikhichnđưcn1cnh. b.ðbàitp Bàitp1 :Chođthvơhưngcĩtrngssau: Biudinđthdngmatrnk,danhsáchcnh(cung),danhsáchlienkt. ÁpdngthuttốnPrim(xutpháttiđnh1)hocKruskaltìmcâykhungnhnht chođthtrên. Bài2ÁpdngthuttốnKruskalđtìmcâykhungnhnhtcađthchotrong hìnhdưiđây: Trang52
  54. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 c.Hưngdngii Bàitp1 : ThuttốnPrimviýtưng“lanta”,xutpháttđnh1“lanta”tacĩcáccnh tothànhcâykhungnhnhtlnlưtlà:(1,5);(5,4);(4,2)và(4,3) GiV(E)làtpcácđnh(cnh)cađth, Vt(Et)làtpcácđnh(cnh)cacâykhungnhnhtcntìm. ThuttốnPrimvicácbưcthtđưcmiêuttrongbngsau: Bưc E Et Vt Khi {} {1} to 1 {(1,5)} {1,5} 2 {(1,5);(5,4);} {1,5,4} 3 {(1,5);(5,4);(4,2)} {1,5,4,2} 4 {(1,5);(5,4);(4,2)và {1,5,4,2,3}=V=>dng (4,3)} Chúý: ThuttốnKruskalviýtưng“chndn”cácđnhcĩtrngsnhnhttrongcác cnhcịnli,nukotothànhchutrình.Quátrìnhlplichotikhichnđưcn1 cnh. Trang53
  55. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Cáccnhđưcchnđtothànhcâykhungnhnhtlnlưtlà:(2,4);(4,5);(4,3)và (1,5) ThuttốnPrimviýtưng“lanta”,xutpháttđnh4 “lanta”tacĩcáccnhtothànhcâykhungnhnhtlnlưtlà:(4,2);(4,5);(4,3) và(1,5) Vicácbưctht(tlàm) Bài2: Bưckhito.ðtT:=Ỉ.Spxpcáccnhcađththeothtkhơnggimca đdàitacĩdãy: (3,5),(4,6),(4,5),(5,6),(3,4),(1,3),(2,3),(2,4),(1,2) dãyđdàitươngngcachúng 4,8,9,14,16,17,18,20,23. balngpđutiêntalnlưtbsungvàotpTcáccnh(3,5),(4,6),(4,5).Rõ ràngnuthêmcnh(5,6)vàoTthìstothành2cnh(4,5),(4,6)đãcĩtrongTchu trình.Tìnhhungtươngtcũngxyrađivicnh(3,4)làcnhtiptheocadãy. Tiptheotabsungcnh(1,3),(2,3)vàoTvàthuđưctpTgm5cnh: T={(3,5),(4,6),(4,5),(1,3),(2,3)} Chínhlàtpcnhcacâykhungnhnhtcntìm. d.Bàitptgii Bàitp1: Biudinđthdngmatrnk,danhsáchcnh(cung),danhsáchlien kt. ÁpdngthuttốnPrimvàKruskaltìmcâykhungnhnhtchođthsau: Trang54
  56. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bàitp2:Mngantồn ChomtmngN(N<=20)máytínhđưcđánhst1đnN.Sơđmng đưcchobihgmMkênh(đon)nitrctipgiamtscpmáytrongmng, mkênhtươngngvimcp.Chobitchiphítruyn1đơnvthơngtintheomi kênhcamng. Ngưitacnchuynmtbcthơngđiptmáysđnmáyt.ðđmboan tồn,ngưitachuynbcthơngđinnàytheohaiđưngtruyntinkhácnhau(tc khơngcĩkênhnào)camngđưcsdngtrongchaiđưngtruyntin;chophép haiđưngtruyntincùngđiquamtsmáytính).Chiphícamtđưngtruyn đưchiulàtngchiphítrêncáckênhcanĩ.ðơngiáđưngtruyntmáyssang máytđưctínhnhưsau: Vihaimáysvàt,cùngbcthơngđipcĩđdàilà1đơnvthơngtin,đơn giátruynchocp(s,t)đưctínhbngtngchiphíchuynthơngđipantồn (bngtngchiphícahaiđưngtruyntin)lànhnht. Mngtruyntinnĩitrênthamãntínhchtantồntheonghĩalàtmtmáy btkỳluơntruynđưc(mtcáchantồn)thơngđiptimtmáybtkỳkhác.Khi mtmngantồn,ngưitatínhđưcđơngiácamnglàtngđơngiámiđưng truyntmtmáybtkỳtimtmáybtkỳkhác. Trang55
  57. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 MatrnđơngiácamnglàmnghaichiuAcĩNdịngvàNct,màgiá trphntA[i,j]chínhlàđơngiátmáyisangmáyj. Câu1: Chotrưcmtmng,hãykimratínhantồncamngđĩ. Câu2: Khimngkhơngantồnđưcphépbsungmtskênhtruynđ nĩtrthànhantồn.ðơngiámikênhtruynbsungtheođưccoibnghailn giátrccđiđơngiácáckênhđãcĩ.Mikênhbsungđưccoicĩđơngiánhư nhau.Hãytìmcáchbsungcáckênhmimàđơngiámnglànhnht. Câu3: Khimngantồnhocsaukhibsungkênhđmngantồn,hãyin rađơngiámngvàmatrnđơngiá. Dliuvào: chotrongfileINP.B2vicutrúcnhưsau: Dịngđutiênghi2sn,mcáchnhaubiducách. Midịngthitrongsmdịngtiptheoghithơngtinvkênhnithica mnggm3sd[i],c[i],g[i]trongđĩd[i],c[i]làchscahaimáytươngngvi kênhnàyvàg[i](nguyêndương)làchiphíđtruynmtđơnvthơngtintmáy d[i]đnmáyc[i]theokênhnày.Cácgiátrg[i]chotrưckhơngvưtquá40(và nhưvyđơngiácáckênhbsungkhơngvưtquá80). Ktqu:ghirafileOUT.B2theoquicáchsau: Dịngđutiênghi1snguyênpthhinmngcĩantồnhaykhơngvàpcĩý nghĩalàslưngkênhcnbsung.p=0cĩnghĩamngantồn;p>0cĩnghĩamng khơngantồnvàcnbsungpkênhnađmngantồnvichiphíbsungít nht. pdịngtiptheoghipkênhbsung.Cáchghinhưtrongfiledliuvào. Dịngtiptheoghiđơngiácamngantồn. Ndịngtiptheoghimatrnđơngiácamngantồn:mihàngcama trnghitrênmtdịng. Bàitp3:Xâydngđưngngnưc Cĩ1trmcpnưcvàNđimdâncư.Hãyxâydngchươngtrìnhthitktuyn đưngngnưccungcpđnminhàsaochotngchiudàiđưngngphidùng làítnht.Gisrngcácđưngngchđưcnigia2đimdâncưhocgia trmcpnưcviđimdâncư. Trang56
  58. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài8:Tholunvcàiđtthuttốntìmcâykhungnhnhttrênđth Mctiêu Càiđtđưcthuttốnxâydngtpcácchutrìnhcơbn. CàiđtđưcthuttốnPrim,Kruskalđđưaracâykhungnhnhtcađthcho trưc. Mrngýtưng,mrngthuttốnPrim. Càiđtđưcthuttốnxâydngtpcácchutrìnhcơbn. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. Rènluyntưduysángto. a.Nhclilýthuyt b.ðbàitp Bài1 TìmcâybaotrùmnhnhtcađthGdungthuttốnKruskal Bài2 TìmcâybaotrùmnhnhtcađthGdungthuttốnPrim c.Hưngdngii Bài1ðbài :TìmcâybaotrùmnhnhtcađthG Phântíchbàitốn : Trưchttaphixétvídsau: 8 3 2 1 7 2 37 5 1 8 Trang57
  59. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 2 1 4 1 7 6 61 9 Tưtưngcathuttốnlàđưatngcnhvàocâybtđutnhngcnhcĩtrngs nhnhtvàlàmchođnkhicâybaogmttccácđnhcađth. GisTlàcâybaotrùmcntìm.VàtpVlàtpbaogmcáctpGicĩtínhcht nhưsau: G icĩphntlàcácđnhcađthmàchúngđưcnivinhaubicáccnhđã đưcđưavàoT.TmtđnhthucG iluơncĩđưngđiđnmtđnhkháccũng thucG i. GiaocaG i vàG J bngrng. ViđnhnghĩanhưtrêntanhnthyrõràngrngmimttpG ithuctpVlà mtcâybaotrùmconnhnht.Nhưvythuttốncachúngtanhưmtbàitốn quynplàgpnhưngcâybaotrùmnàythànhnhngcâytrùmlnhơnchođnkhi nĩgmttccácđnhcađthvàđươngnhiêntaphininhngcâybaotrùmG i nàybngnhngcnhcĩtrngsnhnht.KtthúckhiV={{1,2,3 ,n}}={X}; Banđu: +Câybaotrùmcađthlàrngnghĩalàchưacĩcnhnàođưcđưavàocâybao trùm.(T=). +G i chínhlànhngđnhcađth=>V={{1},{2},{3} ,{n}} Thuttốnđưcvitcthvivídtrênnhưsau: KhitoT={} V={{1},{2},{3},{4},{5},{6},{7},{8},{9}} ðưacnhnhnht(1,2)vàocâykhiđĩ1đưcnivi2nênthay{1}và{2} trongVbng{1,2} Trang58
  60. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 T={(1,2)} V={{1},{2},{3},{4},{5},{6},{7},{8},{9}} ðưacnh(4,5)vàocây: T={(1,2);(4,5)} V={{1,2},{3},{4,5},{5},{6},{7},{8},{9}} ðưacnh(5,6)vàocây: T={(1,2);(4,5);(5,6)} V={{1,2},{3},{4,5,6},{7},{8},{9}} ðưacnh(6,9)vàocây: T={(1,2);(4,5);(5,6);(6,9)} V={{1,2},{3},{4,5,6,9},{7},{8}} ðưacnh(1,4)vàocây: T={(1,2);(4,5);(5,6);(6,9);(1,4)} V={{1,2,4,5,6,9},{3},{7},{8}} ðưacnh(5,7)vàocây: T={(1,2);(4,5);(5,6);(6,9);(1,4);(5,7)} V={{1,2,4,5,6,9},{3},{8}} ðưacnh(3,5)vàocây: T={(1,2);(4,5);(5,6);(6,9);(1,4);(5,7);(3,5)} V={{1,2,3,4,5,6,7,9};{8}} ðưacnh(7,8)vàocây: T={(1,2);(4,5);(5,6);(6,9);(1,4);(5,7);(3,5);(7,8)} V={{1,2,3,4,5,6,7,8,9}} KtthúcvìV={X}; Trang59
  61. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Chúý:Thtchncáccnhđưavàocâylàưutiêncáccnhcĩtrngsbéhơn. Cutrúcdliu Tabiudinđthdưidnglitkêcáccung(chápdngchođthnh) Nhưvydungmtmnghaichiu: e:array[1 Emax,1 3]ofInteger vie[i,3]làtrngscacung(e[i,1],e[i,2], ,emax) MngT:array[1 Emax,1 2]ofIntegerbiudincáccnhđưcđưavàoT. DùngbinsolTđxácđnhslưngcnhđãđưavàocâyT; (khitosolT:=0nghĩalàcâyT=) BiudinVlàtphpcacáctphprtphctp,dođĩtadùngmt Cutrúcd liuđơnginđmơphngtpVnhưsau: MngtapV:array[1 Nmax]ofinteger TrongđĩhaiđnhivàjthuccùngmttpG knàođĩnunhưtapV[i]=tap[j] NhưvybanđugiátrcamngtapVlàtapV[i]gánbngi; mibưckhitaghépcácđnhca2tpG k vàG hthànhmttpthìtachvicgán ccácgiátrcatpG kbnggiátrcatpG h. VídviN=10; mtbưcnàođĩ mngtapV=[1,2,2,6,6,2,1,4,4,10] tahiulàV={{1,7};{2,3,6},{4,5},{8,9},{10}} đnbưctiptheotađưacnh(4,6)vàocâynghĩalàcngp2tp{2,3,6}và{4,5} thànhmt.TagántapV[4]=tapV[2;] tapV[5]=tapV[2;]; KhiđĩmngtapV=[1,2,2,2,2,2,1,4,4,10] ðiunàyrtcĩlikhitagphaitphpconvinhau. Trang60
  62. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Vitồnbdliuđưcmơtnhưtrêntacĩphncàiđtchươngtrình: Chươngtrìnhminhha : Programkruskal; ConstNmax=100; Emax=1000; Typemangcanh=array[1 Emax,1 2]ofinteger; Dinh=array[1 Nmax]ofinteger; Vare,T;Mangcanh; TapV:Dinh; N,solE,solT:integer; (*solElàscnhcađthcịnsolTlàscnhđưcđưavàoT*) PrrocudureDoctep; (*Dliuvàogmcĩ: DịngđutiênchasN Tdịngthhaitrđimidịngcha3snguyênlà2đnhcamtcnhvàtrng scacnhđĩ. *) Varf:text; i,j,k:integer; BeginAssign(f’,cung.txt’);Reset(f); Readln(F,N); SolE:=0; Whilenoteof(f)do Trang61
  63. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 beginRead(f,i,j,k); Inc(solE); e[solE,1]:=i; e[solE,2]:=j; e[solE,3]:=k; End; Close(f); End; ProcedureSapxep; (*Dùngphươngphápspxpnibtđspxpcáccnhtheothttrngst nhtiln(*) Varij:integer; Beign Fori:=1tosolE1do Forj:=i+1tosolEdo Ife[i,3]>e[j,3]then Doicho(i,j); End; ProcedureDoicho(i,j;integer); Vartemp:integer; Begin Temp:=e[i,1]; Trang62
  64. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 e[i,1]:=e[j,1]; e[j,1]:Temp; Temp:=e[i,2]; e[i,2]:=e[j,2]; e[j,2]:=Temp; Temp:=e[i,3]; e[i,3]:=e[j,3]; e[j,3]:=Temp; End; ProcedureTimCay: Vari,k,temp:integer; Begin solT:=0;(*T=*) Fori:=1toNdo TapV[i]:=i; K:=0; While(notKttapV)and(K tapV[e[k,2]]then (*Nu2đnhe[k,l]vàe[k,2]chưathuccùng1câyconthìtamiđưavàocâyT Trang63
  65. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 vàthchintip.Ngưclithìbquacnhnàyđtránhtothànhchutrìnhtrong cây*) Begin Inc(solT); T[solT,1]:=e[k,1]; T[solT,2]:=e[k,2]; (*ðngnhtgiátrtrong2tpconcha2đnhe[k,1]vàe[k,2]caV*).ðưacnh vàocâykhung. temp:=tapV[e[k,2]]; Fori:=1toNdo IftapV[i]=tempthen TapV[i]:=TapV[e[i,2]]; End; End; End; FunctionKTtapV:Boolean; (*HàmkimtraxemcácgiátrcatpVcĩbngnhauhaykhơng*) Vari:integer; BeginKTtapV:=True; Fori:=2toNdo IftapV[i]<>tapV[i]then BeginKTtapV:=False; Exit; Trang64
  66. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 End; End; ProcedureGhiTep; (*TachvicđưacâyTramànhình*) Vari:integer; begin Writeln(‘CaccungthuoccaybaotrumnhonhatTla:’) Fori:=1tosolTdo Writeln(T[i,l];‘‘;T[i,2]; Readln; End; BEGIN DocTep; Sapxep; TimCay; GhiTep; END. Bài2 ðbài: TìmcâybaotrùmnhnhtcađthG Phântíchbàitốn : GisTlàcâybaotrùmtithiucnxâydng.Gixtabtđutđnhu. GiUlàtpcácđnhkvicácđnhcĩcungnivicâyT; KhitoU=u; Trang65
  67. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 T=; B1:Chn(u,v)làcnhcĩtrngsbénhtviu B2:ðưađnhvvàotpU; B3:NuU=Xthìktthúc;ngưclithìquaylibưc1; Cutrúcdliu Tabiudinđthdưidnglitkêcáccung(chápdngchođthnh) Nhưvydungmtmnghaichiu: e:array[1 Emax,1 3]ofInteger vie[i,3]làtrngscacung(e[i,1],e[i,2], ,emax) MngT:array[1 Emax,1 2]ofIntegerbiudincáccnhđưcđưavàoT. DùngbinsolTđxácđnhslưngcnhđãđưavàocâyT; (khitosolT:=0nghĩalàcâyT=) BiudinVlàtphpcacáctphprtphctp,dođĩtadùngmt Cutrúcd liuđơnginđmơphngtpVnhưsau: MngtapV:array[1 Nmax]ofinteger TrongđĩhaiđnhivàjthuccùngmttpG knàođĩnunhưtapV[i]=tap[j] NhưvybanđugiátrcamngtapVlàtapV[i]gánbngi; mibưckhitaghépcácđnhca2tpG k vàG hthànhmttpthìtachvicgán ccácgiátrcatpG kbnggiátrcatpG h. VídviN=10; mtbưcnàođĩ mngtapV=[1,2,2,6,6,2,1,4,4,10] tahiulàV={{1,7};{2,3,6},{4,5},{8,9},{10}} đnbưctiptheotađưacnh(4,6)vàocâynghĩalàcngp2tp{2,3,6}và{4,5} thànhmt.TagántapV[4]=tapV[2;] Trang66
  68. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 tapV[5]=tapV[2;]; KhiđĩmngtapV=[1,2,2,2,2,2,1,4,4,10] ðiunàyrtcĩlikhitagphaitphpconvinhau. TpUlàtpcácđnhcĩcungniviT,khaibáoT,X:setof1 Nmax; Cácthànhphndliukháckhaibáogingnhưphntrưc. ProgramPrim; ConstNmax=100; Emax=1000; Type mangcanh=array[1 Emax,1 3]ofinteger; Tap=setof1 Nmax; Var e,T:Mangcanh; VTX:Tap;{X:Tpđnhcađth;V T:Tpđnhcacây} N,solE,solT:integer; (*Thtcđcfilevàghifiletươngtnhưtrên*) ProcedureTimcay; Var k,i,j:integer; TrongsoMin:Longint; Begin solT:=0;V T=[xp] X:=[]; Fori:=1toNdo X:=X+[i]; Trang67
  69. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 REPEAT (*Tìmcnh(u,v)saochouvàcĩtrngsnhnht*) TrongsoMin:=MaxLongint; Fork:=1tosolEdo Begin If(e[k,l]inV Tandnote[k,2]inV Tand(e[k,3]<TrongsoMin) then Begin i:=e[k,1]; j:=e[k,2]; TrongsoMin:=e[k,3; End; Ifnote[k,1]inV Tand(e[k,2]inV Tand(e[k,3]<TrongsoMin) then Begin i:=e[k,2]; j:=e[k,1]; TrongsoMin:=e[k,3]; End; (*ðưajvàotpU*) vT=V T+[j]; (*ðưacnh(i,j)vàocâyT*) inc(solT); Trang68
  70. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 T[solT,1]:=i; T[solT,2]:=j; UNILTU=X; End; BEGIN Docfile; Timcay; Ghifile; END. d.Bàitptgii Trang69
  71. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài9,10:Bàitốntìmđưngđingnnht Mctiêu Mctiêucabàinàyngưihccĩkhnăng:Biudinđthtrênmáytínhbng cácphươngphápkhácnhau. Ápdngđưcthuttốnfordbellmanvàdijkstratìmđưngđingnnhtngvi mtđthxácđnh.Càiđtđưcthuttốn. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt Thuttốndijkstraviýtưng“lanta”vàlưu1chstimiđnh. ðtìmliđưngđingnnht,talưuctênđnhlinktrưcnĩtrênđưngđi ngnnht. b.ðbàitp Bàitp1: Biudinđthdngmatrnk,danhsáchcnh(cung). ÁpdngthuttốnDijkstratìmđưngđingnnhttđnh5ticácđnhcịnli chođthsau: Bài2Tìmđưngđingnnhtt1đncácđnhcịnlicađth Trang70
  72. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài3ðưathư Nhàbácđưathưcĩvicbn,bácđưathưrtstrutmunvnhàngay nhưngbácphiđưamtthưquantrngchoanhBqunBaðình.Hinti bácqunThanhXuân.ðưngđitchbáctinhàanhBphiđiquamts qunhuynkhácvikhongcáchgiacácqunnhưsau.Hãygiúpbácđưa thưtìmđưngđingnnhtvithigianítnhtđbáccĩthvnhanhchĩng giiquytcơngvicgiađình. Bài4Hbtmi Mtconhđngtrênđicaonhìnxungkhurngvàpháthinra5conmi 5vtríkhácnhau.ConhmunbtconNaitrongs5convtđĩlàNai,Gà, Hươu,Th,Bịđăntht.KhiconHmunbtconNaiđĩ,nĩphichyqua đưngmà4convtcịnliđangđng.Vtrívàkhongcáchmàcácconvt đưcbiudinnhưsau.TìmđưngđiđquãngđưngmàconHphichy làngnnhtđbtđưcconNai. Bài5Mèobtchut MèoTom(1)rìnhchúchutnhJeny(4)đangăntrmphomat.TchTomđn Jenycĩcáixơnưc(2),chucâycnh(3),ghsofa(5)vithigianđTomchy đncácđvttrênvàgiacácđvtcũngnhưthigianTomchytcácđvt đnJenynhưsau:xơnưcchucâycnh Trang71
  73. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Tom Jeny ghsofa TomcĩthchyđnnpchcácđvttrênđrìnhvàbtJeny.Tìmthigian nhnhtđTomchyđnbtJenymàkhơngbJenypháthin(nhnpvàocácđ vtcĩtrênđưngđi) Bài6 ChođthcĩtrngsG=(X,E).Tìmđưngđingnnhtgia2đnhxpvà ktthúccađth c.Hưngdngii Bài1: Biudinđthdngmatrnknhưsau: 0 18 M 13 12 18 0 11 3 M M 11 0 5 9 13 3 5 0 4 12 M 9 4 0 DùngthuttốnDijkstragimtrngs1lntimiđnhtacĩ: Kíhiu: Trang72
  74. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 D[i]:Chstiđnhi(Tngtrngstđnhxutpháttiđnhi,đưccpnht theotngbưccathuttốn) T[i]:Tênđnhkngaytrưcđnhitrênđưngđingnnhtđưccpnhttheo tngbưccathuttốn Bưc ðnh5 Cácđnh D[1],T[1] D[2],T[2] D[3],T[3] D[4],T[4] đưc chưaxét chn Khito 5 1,3,4,2 12,5 ∞ 9,5 4,5 1 4 1,3,2 12.5 7,4 9,5 4,5 2 2 1,3 12,5 7,4 9,5 4,5 3 3 1 12,5 7,4 9,5 4,5 4 1 12,5 7,4 9,5 4,5 Trongđĩ,bưckhitođưcchotrongdịngđutiên. Thchinbưc1,trongD[v],viv=1,2,3,4dịngđutiên,thìD[4 ] =4lànhnhtnênđnh4đưcchn.TaxácđnhlicácD[v]chocácđnhcịnli 1,2và3.ChcĩD[2]lànhđivàD[2]=7,vìD[4]+c(4,2)=4+3=7< ∞. Tiptcthchincácbưc2,3,4tathuđưcđdàiđưngđingnnhtt đnh0ticácđnh1,2,3,4đưcchodịngcuicùngtrongbng,chnghnđ dàiđưngđingnnhtt5ti2làD[2]=7vàđĩlàđdàicađưngđi5 42. Bài2Tìmđưngđingnnhtt1đncácđnhcịnlicađth Trang73
  75. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Ktqutínhtốntheothuttốnđưctrìnhbàytheobngdưiđây:Quyưcvit haithànhphncanhãntheothtd[v].ðnhđưcđánhdu*làđnhđưcchnđ cđnhnhãnbưclpđangxét,nhãncanĩkhơngbinđicácbưctiptheo,vì thtađánhdu(). Bưclp ðnh1 ðnh2 ðnh3 ðnh4 ðnh5 ðnh6 Khi 0,1 1,1 * ∞,1 ∞,1 ∞,1 ∞,1 1 6,2 3,2 * ∞,1 8,2 2 4,4 * 7,4 8,2 3 7,4 5,3 * 4 6,6 * Bài 3 Nhà bác đưa thư cĩ vic bn, bác đưa thư rt st rutmunv nhàngay nhưngbácphiđưamtthưquantrngchoanhBqunBaðình.Hintibác qunThanhXuân.ðưngđitchbáctinhàanhBphiđiquamtsqun huynkhácvikhongcáchgiacácqunnhưsau Trang74
  76. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Hãygiúpbácđưathưtìmđưngđingnnhtvithigianítnhtđbáccĩthv nhanhchĩnggiiquytcơngvicgiađình. *Phântíchbàitốn:BácđưathưcnchuynthưtqunThanhXuântiQunBa ðìnhnhưnglikhơngcĩđưngđitrctiptqunThanhXuântiqunBaðình màphiđiquamtsqunkhác.ViđimxutphátlàqunThanhXuântìmcác conđưngcĩthđitiqunBaðìnhvàtínhkhongcáchgiahaiqunđĩkhiđi quacácconđưngkhácnhau. Ta tính khong cách t Qun Thanh Xuân (Q.TX) ti các Q.Thanh Trì (Q.TT), Q.HồngMai(Q.HM),Q.TâyH(Q.TH),Q.Hàðơng(Q.Hð).Tathykhơngcĩ đưngđitrctiptQ.ThanhXuânđnQ.Hàðơng,nêncịn3slachnlàđi quaQ.TT,Q.HMvàQ.TH.Tacĩkhongcáchtươngnglà: Q.TX Q.TT=1km; Q.TX Q.HM=7km; Q.TX Q.TH=6km; NX:QuãngđưngtQ.TXđnQ.TTngnnhtvi1km.Vytaschnvàđánh duliđinày. TiptctínhđưngđitQ.TTđnQ.HM,Q.TH,Q.HðvàQ.Bð.Tacĩ: Q.TT Q.HM=∞; Q.TT Q.TH=3km; Q.TT Q.Hð=4km; Trang75
  77. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Q.TT Q.Bð=1km; NX:QuãngđưngtQ.TTđnQ.Bðlàngnnht1kmvàlàđíchcachuynđi. VytngkhongcáchtQ.TX Q.Bðlà1+1=2km. Giscácđnh1,2,3,4,5,6tươngngvicácqunThanhXuân,HồngMai,Tây H,ThanhTrì,HàðơngvàqunBaðình.Tacĩđthsau: TìmđưngđingnnhttqunThanhXuântiBaðìnhlàtìmđưngđingn nhtgiatđnh1tiđnh6cađthtrên.ÁpdngthuttốnDijkstratacĩbng sau: 1 2 3 4 5 6 Khito 1,0* 1,∞ 1,∞ 1,∞ 1,∞ 1,∞ 1 1,7 1,6 1,1* 2 4,4 4,5 4,2* 3 * 6,4 4 * Tbngtrêntathyconđưngngnnhtđđitđnh1tiđnh6là1 4 6 vitrngslà2,nĩicáchkhácbácđưathưcĩthđitqunThanhXuântiqun ThanhTrìvàtiqunBaðìnhviquãngđưnglà2km. Trang76
  78. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài4 Mtconhđngtrênđicaonhìnxungkhurngvàpháthinra5conmi 5vtríkhácnhau.ConhmunbtconNaitrongs5convtđĩlàNai,Gà, Hươu,Th,Bịđăntht.KhiconHmunbtconNaiđĩ,nĩphi chyqua đưngmà4convtcịnliđangđng.Vtrívàkhongcáchmàcácconvtđưc biudinnhưsau.TìmđưngđiđquãngđưngmàconHphichylàngnnht đbtđưcconNai. *Phântíchbàitốn:Conhkhơngthbtđưcttc5convtđĩ,vànĩchcĩth chn1.TrongcácconđưngđđiđnchconNaimànĩmunbtđĩ,cĩnhng conđưngdàivàngnkhácnhau.Nĩphitínhtốnsaochoquãngđưngchyđn conNaiđĩlàngnnhtđđphịngconvtđĩnhìnthytxavàbchy. GivtríH,Bị,Th,Hươu,Naitươngnglà1,2,3,4vicácđnhcađthsau: ðđit1đn5tatínhkhongcácht1đncácđnhcịnli: 1 2=4 1 3=∞ Trang77
  79. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 1 4=∞ 1 5=∞ Tathycĩđưngđiduynhtlà1 2. Tiptctínhkhongcácht2 3,4,5tacĩ: 2 3=10 2 4=2 2 5=8 NX:Quãngđưng2 4lànhnht.ðánhduvàchnconđưngnày. Khichnđưngđi,nuđưngnàođãđưcchnvàđánhduskhơngđưcxétli na.Vycịnli2đnhchưaxétlà3và5,nhưngkhơngcĩđưngđitrctipt4 3,chcịnđưng4 5vikhongcáchlà1kmvàlàmcđíchcabàitốn. KL:ðưngđingnnhtt1 5là1 2 4 5vikhongcáchlà1+4+2=7 ÁpdngthuttốnDjstraltacĩbngsau: 1 2 3 4 5 Khito 1,0* 1,∞ 1,∞ 1,∞ 1,∞ 1 1,4* 2 2,14 2,6* 2,12 3 4,7* 4 Nhìnvàobngtrêntathyđưngđingnnhtt1đn5là1245vitrngs là7. NĩicáchkhácconHmunbtvàănthtconNaithìHphiđiquachconBịvà conHươu. Bài5 Trang78
  80. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 MèoTom(1)rìnhchúchutnhJeny(4)đangăntrmphomat.TchTomđn Jenycĩcáixơnưc(2),chucâycnh(3),ghsofa(5)vithigianđTomchy đncácđvttrênvàgiacácđvtcũngnhưthigianTomchytcácđvt đnJenynhưsau:xơnưcchucâycnh Tom Jeny ghsofa TomcĩthchyđnnpchcácđvttrênđrìnhvàbtJeny.Tìmthigian nhnhtđTomchyđnbtJenymàkhơngbJenypháthin(nhnpvàocácđ vtcĩtrênđưngđi) Bàilàm: Gisvtrícácđitưngtươngngvicácđnh1,2,3,4,5cađthsau: Phântíchtươngtnhư2bàitốntrêntastìmđưcconđưngcntìm ÁpdngthuttốnDijkstrađtìmđưngđingnnhtt1 4 1 2 3 4 5 Khito 1,0* 1,∞ 1,∞ 1,∞ 1,∞ 1 1,3* 1,12 Trang79
  81. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 2 2,8 2,7* 3 5,15* 4 Davàobngtrêntacĩconđưngngnnhtlà1–2–54vithigianlà15 Bài6 ChođthcĩtrngsG=(X,E).Tìmđưngđingnnhtgia2đnhxpvà ktthúccađth. Phântíchbàitốn : Phươngpháp1:Timiđnhthchinvicgimtrngsnhiuln. Bàitốnnàycũngdùngmng truoc đánhducácđnhtrênđưngđinhưtrênvà dùngcutrúchàngđi. Cĩmtđimmilànĩcnthêmmtmng trongso :array[1 Nmax]of (tuỳvàobàitốn cĩthlàkiurealhockiulongint). Trongso [i]bngtngtrngscacáccungnmtrênđưngđitínhtđnhxpcho đni.Bàitốncachúngtatrthànhtìmmng trongso [i]saochonĩđtgiátr nhnht. Thuttốncaphnnàyrtgingthuttốnduytchiurngnhưngcitinmt chútlàcĩgnthêmmngtrngs. Khiduytcácđnhkcamtđnhuvalyrakhihànhđi,gpmtđnhik viutakhơngcnbit truoc [i] làđnhnào,màtachquantâmđưngđituđni cĩngnhơnđưngcũkhơng( trongso [i]??? trongso [u] + a[u,i]. Trongso [i]chínhlàđưngđicũđnđnhi, trongso [u]+a[u,i]làđưngđimit đnhuđiđn. Nuđưngmingnhơnnghĩalà trongso [u]+a[u,i]< trongso [i]thìtaghinhn đưngđimi,taphidánli: trongso [i]:= trongso [u]+a[u,i]; Trang80
  82. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 truoc [i]:=u; Thuttốnđưctrìnhbàycthnhưsau: Khito: Mngtrongso[i]=Maxlongint; Truoc[xp]:=1; Khiđnghàngđivàđưaxpvào; Thchinbưclp. REPEAT Ly1đnhkhihàngđignvàobinu; Duytcácđnhikviu; (Nuđưngđimingnhơnđưngđicũthìthchingimtrngschoi) Nutrongso[i]>trongso[u]+a[u,i]thì +trongso[i]:=trongso[u]+a[u,i]; +truoc[i]:=u; UNILT ; Chươngtrìnhminhha : ProgramDIJSTRA_phuongphap1; ConstNmax=100; Type MATRANKE=array[1 Nmax,1 Nmax]ofinteger; MANG=array[1 Nmax]ofLongint; Var a:MATRANKE; q,duong,truoc,trongso:MANG; Trang81
  83. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 N,sold,xp,kt,qf,ql:Integer; fifo:text: (*fi:fileinputlatepdocdulieuvao fo:fileoutputlatepdocdulieura*) Procedore Doctep ; Var i,j:integer; Begin Asign(fi,’matran:inp’);Reset(fi); Readln(fi,N); Fori:=1toNdo Forj:=1toNdo Read(fi,a[i,j]); Readln(f,xp,kt); Close(f); End; ProcedureInitQ: (*Thutuckhoidonghangdoi*) Begin qf:=0; ql:=1; End; Trang82
  84. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Procedure Put (u:integer); (*Duamotphantuvaohangdoi*) Begin Inc(ql); q[ql]:=u; End; FunctionGet:Integer; (*Hamlaymotphanturakhoihangdoi*) Begin Get:=q[qf]; inc[qf]; End; Function Qempty :Boolean; (*Hamkiemtrahangdoidaronghaychưa*) Begin Qempty:=(qf>ql); End; Procudure Dijstra (*Thutucduyet Dijstratheophuongphap1:giamtrongsonhieulan*) Vari,u:integer; Trang83
  85. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Begin (*cacbuockhoitao(giongtrongphanthuattoan)*) truoc[xp]:=1; Fullhar( )=Fori:=0toNdoTrongso[i]:=MaxLongint; Trongso[xp]:=0; InitQ; Put(xp); (*Batdauvonglap*) REPEAT (*Laymotdinhkhoihangdoiganvaobienu*) u:= Get; Fori:=1toNdo (*Duyettatcacacdinhicuadothi*) If(a[u,i]>=0)and(trongso[i]>trongso[u]+a[u,i]then (*Neudinhikevoiuvaduongdiculonhonduongdimoi thi:*) Begin(* Ganlaigiatriduongdimoi*) trongso[i]:=trongso[u]+a[u,i]; (*danhdauduongdimoideniquadinhtruocdolau*) truoc [i]:=u; Put (i); End; UNILTQempty: (*Ketthuckhikhongdiduocnua*) End; Trang84
  86. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Procedure Timnguoc; Varu:integer; Begin sold:=0;(*Mngđưngrng*) (*Banđugánubngkt*) u:=kt; Repeat (*Vimibưclpghiuvàomngduong*) Inc(sold); duong[sold]:=u; (*Munđnbưctiptheophignu=truoc [u]*) u:=truoc[u]; Uniltu=1;(*Ketthuckhiu:=1doluctruoctagantruoc[xp]=1). End; procedure Ghitep : Varij:integer; Begin Asign(fo,‘kq.out’);Rewrite(fo); Iftruoc[kt]<>0then Begin Timnguoc ; Fori:=solddownto1do Write(fo,duong[i],‘‘)’ Trang85
  87. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Endelse Writeln(f,0); Close(fo); End; BEGIN Doctep; Dijstra; Ghitep; END. Phươngpháp2:Gimtrngs1lntimiđnh. ðlàmrõthuttốnnàytaxétvídcthsau: G=(X,E)đưarahìnhv Mngmatrntrngsnhưsau: 1 1 2 5 1 1 1 1 1 1 3 1 1 1 3 2 1 1 7 1 1 1 5 5 3 7 1 5 1 13 1 4 1 1 1 5 1 2 1 1 1 1 1 2 1 6 2 6 1 1 1 13 1 6 1 7 Tatìmđưngđibtđutđnh1. Trang86
  88. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Cácbưcthchincathuttốnđivivídnàynhưsau: (M=MaxLongint).Trìnhtthchinmibưcttráisangphi. ðnhcĩ trngs Bưc TpA TpB Mngtrongso MngTruoc nhnht trongB B1 [1] [2,3,4,5,6,7] [0,M,M,M,M,M,M] [1,0,0,0,0,0,0,] B2 [1] [2,3,4,5,6,7] [0,1,2,5,M,M,M] [1,1,1,1,0] B3 2 [1,2] [3,4,5,6,7] [0,1,2,4,M,M,M] [1,1,1,2,0,0,0] B4 3 [1,2,3] [4,5,6,7] [0,1,2,4,M,M,M] [1,1,1,2,0,0,0] B5 4 [1,2,3,4] [5,6,7] [0,1,2,4,8,M,17] [1,1,1,2,4,0,4] B6 5 [1,2,3,4,5] [6,7] [0,1,2,4,8,10,17] [1,1,1,2,4,5,4] B7 6 [1,2,3,4,5,6] [7] [0,1,2,4,8,10,16] [1,1,1,2,4,5,6] B8 7 [1,2,3,4,5,6,7] [] nt Nt B9 Ktthúc Bàitốnnàycũngdùng mngtrưcđánhducácđnhtrênđưngđinhưtrên nhưngkhơngdùngcutrúchàngđi. Dùngmtmngtrongso:array [1 Nmax]of (tuỳvàobàitốn cĩthlàkiurealhockiulongint). Trongso [i] bngtngtrngscacáccungnmtrênđưngđitđnhxpchođn i.Bàitốncachúngtatrthànhtìmmng trongso [i]saochonĩđtgiátrnh nht. ChiatpcácđnhcađthXthành2phn a.TpcácđnhcĩtrngsđưcgáncđnhA. b.TpcácđnhcĩtrngsđưcgántmthiB. Trang87
  89. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 TrongsutquátrìnhduytnhngđnhđưcđưavàotpAthìtrngscađnhđĩ khơngthayđivàlàđdàiđưngđingnnhttxpđnnĩ,nhngđnhtpBcĩ trngsthayđiđnkhinhnhtthìđưcđưavàotpA.Cáchthayđitrngs đnhnhtđưcthhinnhưsau: B1:Khito Khitocácgiátrcamngtrongso=Maxlongint(hocMaxreal) LphaitpAvàB.BanđuArngcịnB=X Duytttccácđnhukviđnhxpthìgántrongso[u]=a[u,xp]vàtruoc[u]= xp; REPEAT B2:TìmđnhvthuctpBcĩtrngsnhnht. ðưađnhvvàotpA(B/{v};A+{v}) B3:DuytttccácđnhithucBmàkviv Nutrongso[i]>trongso[v]+a[i,v]thì +Gánlitrongso[i]:=trongso[v]+a[i,v]; +ðngthigántruoc[i]:=v; UNILT ; Cutrúcdliu Matrnkbiudinquanhcađth: a(i;j)=1nuikhơngnivij >=nuinivijvàa(a,j)làtrngscacung9i,j). Mng truoc và trongso đưcmơtnhưtrên. Mng duong đlưucácđnhtrênđưngđi. ðbiudintpAvàBtadùngkiutphp. tap:setof Trang88
  90. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Trongphncàiđttrên,khaibáotpAchlàminhhồchothuttốncịntrongbài tốnnàykhơngcnthitphisdngtpA,tahiungmkhiloimtphntkhi tpBthìnghĩalàtađãđưanĩvàotpA. Chươngtrìnhminhha : Program Difstra_Phuongphap2; ConstNmax=100; TypeMang=array [0 Nmax]ofLongint; Tapcacdinh=setofa Nmax; Var a:array[1 Nmax,1 Nmax]ofinteger; duong,truoc,trongso:Mang; N,sold,xp,kt:Integer; tapA,tapB:setofTapcacdinh; (*ChtrìnhbàythtcDijstra,cácthtckháctươngtnhưphntrên*) Prcedure Dijstra; Vari,u,v:integer; Begin(*B1khitocácgiátrcnthit*) Fori;=0toNdo Trongso [i]:=MaxLongint; (*KhitotpBlàtpttccácđnhcađth*) tapB:=[]; Fori:=1toNdo tapB:=tapB+[i]; (*ðưaxpvàotpA*) tapA:=[xp] Trang89
  91. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 tapB:=tapB[xp]; truoc[xp]:=1; (*Tìmcácđnhkvixpgntrngsvànhânchonhngđnhđĩ*) Fori:=1toNdo ifa[xp;i]>=0then Begin trongso[i]:=a[xp,i]; truoc[i]:=xp End; REPEAT (*TìmđnhvcĩtrngsnhnhttrongtpBvàđưavàotpA,loikhitp B*). j:=Dinh_co_trong_so_min; tapA:=tapA+[j]; tapB:=tapB+[j]; (*TìmttccácđnhthucBkviđnhvvàthchinvicgimtrngs chochúng*). Fori:=1toNdo If(iintapB)and(a[i,j]>=0and(trongso[i]>trongso[j]+a[i,j])then Begin trongso[i]:=trongso[j]+a[i,j]; truoc[i]:=j; End; UNILTtapB=[]; Trang90
  92. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 End; (*HàmtìmđnhcĩtrngsnhnhttrongcácđnhthuctpB*) FunctionDinh_co_trong_so_min:Integer; Vari,t:integer; BegintS[it]:=maxint Fori:=1toNdo If(iintapBand(trongso[i]<trongso[t]then t:=i; Dinh_co_trong_so_+min:=t End; d.Bàitptgii Bàitp1:ÁpdngthuttốnDijkstratìmđưngđingnnhtchođthsau: Trang91
  93. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bàitp2:Dichuyntrêncáchìnhtrịn ChoNhìnhtrịn(đánhst1đnN).Mtngưimunđithìnhtrịnnày sanghìnhtrịnkháccntuântheoquiưc: Nukhongcáchgia2đimgnnhtca2hìnhtrịnkhơngquá50cmthì cĩthbưcsang. Nukhongcáchnàyhơn50cmvàkhơngquá80cmthìcĩthnhysang. Cáctrưnghpkháckhơngthsangđưc. Mtđưngđithìnhtrịnnàysanghìnhtrịnkhácđucgilàcàng"tt"nu slnphinhylàcàngít.Haiđưngđicĩslnnhybngnhauthìđưngđinào cĩshìnhtrịnđiquaíthơnthìđưngđiđĩ"tt"hơn. Cáchìnhtrịnđưcchotrongmtfilevănbn,trongđĩdịngthimơt hìnhtrịnshiui(i=1,2, ,N)baogm3sthc:hồnhđtâm,tungđtâm,đ lnbánkính(đơnvđobngmét). Lptrìnhđccáchìnhtrịntmtfilevănbn(tênfilevàotbànphím),sau đĩcmilnđcshiuhìnhtrịnxutphátSvàhìnhtrịnktthúcTtbànphím, chươngtrìnhsđưarađưngđitSđnTlà"ttnht"theonghĩađãnêu(hoc thơngbáolàkhơngcĩ). Yêucuđưngđiđưcvitdưidngmtdãycácshiuhìnhtrịnlnlưt cnđưcđiquatrongđĩnĩirõtngscácbưcnhy,tngscáchìnhtrịnđiqua vànhngbưcnàocnphinhy. Giihnshìnhtrịnkhơngquá100. Bàitp3:Tìmhànhtrìnhtnítxăngnht Trang92
  94. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Trênmtmnglưigiaothơng,mtngưimunđitđimAđnđimB bngxemáy.Xechađưctiđa3lítxăngvàchy100kmht2,5lít.Cáctrm xăngchđưcđtcácđimdâncư,khơngđtgiađưngvàngưinàykhơng mangtheobtkỳthùngchaxăngnàokhác.Hãyvitchươngtrìnhnhpvàomng lưigiaothơngvàxácđnhgiúpngưinàytuynđưngđitAđnBsaochoít tnxăngnht. Bàitp4:Dichuyngiacácđo Trênmtđoquc,cĩNhịnđo.Gisttccácđođucĩhìnhdnglà hìnhchnhtnmngang.Trênmihịnđocĩthcĩsânbaynmtrungtâmđo, cĩthcĩcngnm4gĩcđo.Trênmiđođucĩtuynđưngxebuýtni4 gĩcđovinhauvàvitrungtâmđo.Gia2đocĩthđilibngmáybaynu c2đođucĩsânbayvàcĩthđilibngtàunuc2đođucĩcng. Gisrng: Cáctuynđưng(b,khơng,thy)đulàđưngthng. Chiphíchomikmvàtcđcamiloiphươngtinlà: Phươngtin Tcđ Chiphí (km/h) (đ/km) Máybay 1000 1000 Xebuýt 70 100 Tàuthy 30 50 Hãyvitchươngtrìnhxácđnhtuynđưngvàcáchdichuyngia2hịn đotrongđoqucsaocho: Thigiandichuynítnht. Chiphídichuynítnht. Thigiandichuynítnhtnhưngvimtstinchiphíkhơngquáð đng. Trang93
  95. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 ChiphídichuynítnhtnhưngvithigiandichuynkhơngvưtquáT gi. Bàitp5:Tìmđưngngnnht GisXlàtpcáckhudâncư,Ulàtpcácđưngsánilincáckhuđĩ.Ta gismichgiaonhaucacácconđưngđuthucX.Viconđưngu,sl(u) làđdàicautínhbngkm.Hãychratuynđưngđitmtkhuisangkhujsao chotngchiudàilànhnht. Bàitp6:ðưngđitrênlưi Cho1matrnA[M,N],miphntcanĩcha1stnhiên.T1ơ(i,j) tacĩthđisangơknĩ(cĩchung1cnh)nugiátrcaơknàynhhơngiátr lưutrong(i,j).Hãytìm1đưngđitơ(i,j)tiơ(k,l)trênmatrnsaochophiđi quaítơnht.Hãytìm1đưngđitơ(i,j)tiơ(k,l)trênmatrnsaochotnggiá trcácơphiđiquanhnht. Bàitp7:Tìmđưngvichiphíphitrchophép CĩNthànhphđưcđánhst1 Nnivinhaubngcácđonđưng mt chiu.Miđonđưngbaogm2thơngs:ðdàivàchiphíđicađonđưng. Asngtithànhph1vàAmundichuynđnthànhphNnhanhnhtcĩ th. BnhãygiúpAtìmra đưngđingnnhttthànhph1đnthànhphN màAcĩ khnăngchitrtin. Dliuvào :ROADS.IN DịngđutiênchasnguyênK,0<=K<=10000,stinmàAcĩ. Dịngth2chasnguyênN,2<=N<=100,sthànhph. Dịngth3chasnguyênR,1<=R<=10000,tngsđonđưng. MidịngtrongsRdịngtiptheomơtmtđonđưngbngcácsS, D,LvàTcáchnhaubiítnhtmtkhongtrng. +Slàthànhphkhihành,1<=S<=N. +Dlàthànhphđn,1<=D<=N. Trang94
  96. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 +Llàđdàicađonđưng,1 Nvành hơnK. ROADS.IN ROADS.IN 5 0 6 4 7 4 1223 1452 2433 1210 3424 2311 1341 3410 4621 ROADS.OUT 3520 1 5432 ROADS.OUT 11 Trang95
  97. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bài12:Bàitốnlungccđitrongmng Mctiêu TrìnhbàyđưctưtưngchđocathuttốnFord_Fulkersonvàcàiđtđưc thuttốn. Phântíchđưcbàitốnthcttươngngphnlýthuytđãhc. Sinhviêncĩkhnăngthc. a.Nhclilýthuyt ðnhnghĩa1 .TagimnglàđthcĩhưngG=(V,E),trongđĩcĩduy nhtmtđnhskhơngcĩcungđivàogilàđimphát,duynhtmtđnhtkhơng cĩcungđiragilàđimthuvàmicunge=(v,w) ∈ E đưc gán vi mt s khơngâmc(e)=c(v,w)gilàkhnăngthơngquacacunge. ðnhnghĩa2 .GischomngG=(V,E).TagilungftrongmngG= (V,E)làánhxf:E R +gánchomicunge=(v,w) ∈Emtsthckhơngâm f(e)=f(v,w),gilàluơngtrêncunge,thomãncácđiukinsau: 1.Lungtrênmicunge ∈Ekhơngvưtquákhnăngthơngquacanĩ:0 ≤f(e)≤c(e), 2.ðiukincânbnglungtrênmiđnhcamng:Tnglungtrêncác cungđivàođnhvbngtnglungtrêncáccungđirakhiđnhv,nuv ≠s,t: Div f (v) = ∑ f (v) − ∑ f (v, w) = 0 w∈Γ − (v ) w∈Γ + (v ) Trongđĩ Γ − (v)tpcácđnhcamngmàtđĩcĩcungđnv, Γ + (v) tpcác đnhcamngmàtvcĩcungđnnĩ: Γ − (v) = {w ∈V (: w,v) ∈ E},Γ + (v) = {w ∈V (: v, w) ∈ E}. 3.Giátrcalungflàs val ( f ) = ∑ f (s, w) = ∑ f (w,t .) w∈Γ+ (s) w∈Γ− (t ) Trang96
  98. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bàitốnlungccđitrongmng ChomngG=(V,E).Hãytìmlungf*trong mngvigiátrlungval(f*)làlnnht.Lungnhưvytasgilàlungccđi trongmng. Giiquytbàitốn TmngG=(V,E)khnăngthơngquacáccungvàcácđnh.Tasgii quyttheohaibưcsau: 10XácđnhmngG’. 20TìmlungccđitrongmngG’.Btđutlungzerovikhnăng thơngquacung. ThuttốnFord–Fulkerson 1.Xutpháttmtlungchpnhnđưcf. 2.TìmmtđưngđitănglungP.Nukhơngcĩthìthuttốnktthúc.Nu cĩ,tipbưc3dưiđây. 3.Nu δ(P)=+ ∞thuttốnktthúc. Thuttốngánnhãn(Thelabelingalgorithm) 1.Nut ∈VThocVT= ∅,thuttốnktthúc.Ngưclithìchnmtđnhu ∈VTđthămvàđưanĩrakhiVT.Xétttccácđnhcnhu,tclàxétmi cungcĩdng(u,v)và(v,u). 2.Nu(u,v) ∈E,F(u,v) 0vàvchưagánnhãnthìgánnhãnnĩvàđưavàotp VT. b.ðbàitp Bài1ÁpdngthuttốnFordFullkersontìmlungccđibngcáchgánnhãn cholungzerosau: Trang97
  99. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 a 7,0 b 6,0 5,0 4,0 4,0 s 4,0 c t 5,0 3,0 12,0 7,0 d 9,0 e c.Hưngdngii Bài1 +Bưclp1: s→a→b→t, δ1=1 a(s+, 6) 7,0 b(a+, 6) 6,0 5,0 4,0 4,0 4,0 s c(s+, 4) t(e+, 2) 5,0 3,0 (s, ∞) 12,0 7,0 d(s+, 7) 9,0 e(d+, 4) a 7,4 b 6,4 5,0 4,4 4,0 s 4,0 c t 5,0 3,0 12,0 7,0 d 9,0 e +Bưclp2: s→a→b→c→e→t, δ2=2 Trang98
  100. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 a(s+, 2) 7,4 b(a+, 2) 6,4 5,0 4,4 4,0 4,0 s c(b+, 2) t(e+, 2) 5,0 3,0 (s, ∞) 12,0 7,0 d(s+, 7) 9,0 e(c+, 2) a(s+, 0) 7,6 b(a+, 1) 6,6 5,0 4,4 4,2 4,0 s c(s+, 4) t(e+, 1) 5,0 3,2 12,2 (s, ∞) 7,0 d(s+, 7) 9,0 e(c+, 1) a 7,6 b 6,6 5,0 4,4 4,2 s 4,0 c t 5,0 3,2 12,2 7,0 d 9,0 e +Bưclp3: s→c→e→t, δ3=1 a 7,6 b 6,6 5,0 4,4 4,2 s 4,1 c t 5,0 3,3 12,3 7,0 d 9,0 e +Bưclp4: s→d→e→t, δ4=7 Trang99
  101. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 a 7,6 b 6,6 5,0 4,4 4,2 s 4,1 c t 5,0 3,3 12,10 7,7 d 9,7 e a(s+, 0) 7,6 b(a+, 1) 6,6 5,0 4,4 4,2 4,1 s c(s+, 3) t(e+, 7) 5,0 3,3 12,3 (s, ∞) 7,0 d(s+, 7) 9,0 e(d+, 7) +Bưclp5: s→c→d→e→t, δ5=2 a 7,6 b 6,6 5,0 4,4 4,2 s 4,3 c t 5,2 3,3 12,12 7,7 d 9,9 e a(s+, 0) 7,6 b(a+, 1) 6,6 5,0 4,4 4,2 4,1 s c(s+, 3) t(e+, 2) 5,0 3,3 12,10 (s, ∞) 7,7 d(c+, 3) 9,7 e(d+, 2) +Bưclp6:Khơngcịnđưngtănglungna, Val(f max )=6+3+7=16. d.Bàitptgii Bàitp1: ChoG=(V,E)đthcĩhưngtrongđĩkhơngcĩcung(s,t). Chng minhrngsđưngđicơbnnihaiđnhsvàtlàbngsítnhtcácđnhcađ thcnloibđtrongđthkhơngcịnđưngđinisvit. Trang100
  102. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bàitp2: XâydngthuttốntìmtpE 1ttccáccungcađthmàvictăng khnăngthơngquacabtkỳcungnàotrongEđudnđntănggiátrcalung ccđitrongmng. Bàitp3: Chohaidãysnguyêndương{p i, i=1,2, ,m}và{q j,j=1,2, ,n}.Hãy xây dng ma trn A={a ij : i=1,2, ,m; j=1,2, n} vi các phn t aij ∈{0,1}cĩtngcácphnttrêndịngilàp i,tngcácphnttrênctjlàq j. Bàitp4: Cĩmchàngtrai,ncơgáivàkbàmi,mibàmip(p=1,2, ,k)cĩmt danhsáchL pmtschàngtraivàcơgáitrongscácchàngtraivàcơgáinĩitrênlà kháchhàngcabàta.Bàmipcĩthseduyênchobtccptraigáinàolàkhách hàngcabàta,nhưngkhơngđsctchcquád p đámcưi.Hãyxâydngthut tốncăncvàodanhsáchLp,d p, p=1,2, ,k;đưaracáchtchcnhiunhtcác đámcưigiamchàngtraivàncơgáivisgiúpđcacácbàmi. Bàitp5:Chuynbi CubévN(N<=100)vịngtrịn,đánhst1tiNvàtơmàucácvịngtrịn đĩ(cĩthcĩcácvịngtrịncĩmàugingnhau),sauđĩnitngcpcáccungđnh hưng,micungcĩmtmàunhtđnh.Cácmàu(cacungvàvịngtrịn)đưc đánhst1đn100. Cubéchn3snguyênkhácnhauL,KvàQnmtrongphmvit1tiN, đtvàotrongcácvịngtrịnsLvàKmivịngmthịnbi,sauđĩbtđudi chuynbitheonguyêntcsau: Bichđưcchuyntheocungcĩmàutrùngvimàucavịngtrịncha viênbith2. Bichđưcchuyntheochiucung Haiviênbikhơngđưcđngthicùngmtvịngtrịn; Khơngnhtthitphidichuynlnlưtcácviênbi, Quátrìnhdichuynktthúc,khimttronghaiviênbitivịngtrịnQ. Hãylptrìnhxácđnhcáchdichuynđchmdtquátrìnhsaumtsít nhtcácbưcchuyn. DliuvàotfileBL.INP: Trang101
  103. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Dịngđu:4snguyênNLKQ Dịngth2:NsnguyênC 1,C 2, ,C n;C ilàmàuvịngtrịni Dịngth3:snguyênM(0<M<10000) Mdịngsau:midịng3snguyênA iB iD i;xácđnhcungmàuD i tvịngtrịnA itivịngtrịnB i. Cácstrênmtdịngcáchnhaumtducách. KtquđưarafileBL.OUT: Dịngđu:COhocKHONG,chobitquátrìnhcĩktthúcđưc haykhơng, NudịngđulàCOthìdịng2chasnguyênxácđnhsbưc chuyntithiu. BL.INP BL.OUT 5341 CO 23214 3 8 212 415 452 452 513 322 234 531 351 Trang102
  104. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 Bàitp6:Bngđin Mtlưiơvuơngđưcphtrênmtbngđinhìnhvuơng.Vtrínmtrên giaoca2đưngkcalưisđưcgilànút.Ttccĩnxnnúttrênlưi. Cĩmtsnútchatipđim.Nhimvcabnlàcnnicáctipđimvi cácnúttrênbiêncabngbicácđondâydn(gilàcácmch).Cácmchch đưcchydctheocácđưngkcalưi(nghĩalàkhơngđưcchytheođưng chéo).Haimchkhơngđưcphépcĩđimchung,vìvyhaimchbtkỳkhơng đưcphépcùngchyquacùngmtđonđưngkcalưicũngnhưkhơngđưc chyquacùngmtnútcalưi.Cácmchcũngkhơng đưc chy dc theo các đonkcalưitrênbiên(mchphiktthúckhinĩgpbiên)vàcũngkhơng đưcchyquanútchatipđimkhác. Víd:Bngđinvàcáctipđimđưcchotronghình2a.Núttơđmtrong hìnhvthhinvtrícáctipđim. Yêucu:Vitchươngtrìnhchophépniđưc mtsnhiunhtcáctip đimvibiên.Cáctipđimtrênbiênđãthamãnđịihiđtra,vìthkhơng nhtthitphithchinmchnichúng.Nunhưcĩnhiuligiithìchicnđưa ramttrongschúng. Dliuvào: filevănbnELE.INP: Dịngđutiênchasnguyênn(3<=n<=15). Midịngtrongsndịngtiptheochankýtphâncáchnhaubi mtducách.Mikýtchlà0hoc1.Kýt1thhintipđim, kýt0thhinnútkhơngcĩtipđimtrênvtrítươngngcalưi. Cácnútđưcđánhst1đnn*ntheothtttráisangphi,t Trang103
  105. GiáotrìnhTỐNRIRC2BmơnCơngnghphnmm2010 trênxungdưi.Chscanútchatipđimslàchscatip đim. Ktqu: ghirafileELE.OUT: Dịngđutiênchaklàstipđimlnnhtcĩthnivibiênbi cácmch. Midịngtrongskdịngtiptheomơtmtmchnimttrong sktipđimvibiêntheoquicáchsau:đutiênlàchscatip đimđưcni,tipđnlàdãycáckýtmơthưngcamchni: E:đơng,W:tây,N:bc,S:nam.Giachsvàdãykýtphicĩ đúngmtducách,cịngiacáckýttrongdãykýtkhơngđưccĩ ducách. Ktquphiđưcđưaratheothttăngdncachstipđim. Víd: ELE.IN ELE.OUT 6 11E 000111 16NWN 000010 17SE 000111 27S 000000 28NWWSS 001111 29S 000101 Bàitp7: MtkhĩahcgmNmơnhc,mơnhciphihctrongtingày.Gia cácmơnhccĩmiquanhtrưc/sau:cĩmơnhcchhcđưcsaukhiđãhc mtsmơnhckhác.MiquanhđĩđưcthhinbimtmnghaichiuA[i,j]; i,j=1, ,NtrongđĩA[i,j]=1/0vàA[i,i]bng0vimii,A[i,j]=1khivàch khimơnhciphiđưcdyxongtrưckhihcmơnj(ngàyktthúcmơniphi Trang104