1. Trang chủ
  2. » Giáo án - Bài giảng

Cài đặt thuật toán Dijkstra tìm đường đi ngắn nhất

4 6K 138
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 43 KB

Nội dung

CÀI ĐẶT THUẬT TOÁN DIJKSTRA TÌM ĐƯỜNG ĐI NGẮN NHẤT BẰNG CHƯƠNG TRÌNH PASCAL Thuật toán Dijkstra. Chương trình thuật toán tìm đường đi ngắn nhất từ đỉnh a đến đỉnh z. Dữ liệu được lấy từ tệp DIJKSTRA.INP có cấu trúc : n (số đỉnh) m (số cạnh) a (đỉnh đầu) z (đỉnh cuối) Đỉnh đầu Đỉnh cuối Trọng số x 1 y 1 w 1 x 2 y 2 w 2 … … … x m y m w m Sau khi lấy dữ liệu, chương trình sẽ xác định có tồn tại đường đi ngắn nhất, tìm đường đi ngắn nhất đó và lưu vào tệp DIJKSTRA.OUT có cấu trúc: Dòng đầu : “NO” nếu không tồn tại Dòng đầu : “YES” nếu tồn tại Dòng 2: L(z) độ dài đường đi ngắn nhất Dòng 3: a--> z 1 -->z 2 -->…z n -->z là đường đi ngắn nhất Chương trình: (DIJKSTRA.PAS) PROGRAM thuat_toan_Dijkstra; Uses crt; Const max=100; oo=32000; Type mang=array[1 max] of integer; Var a:array[1 max,1 max] of integer; d:mang; truoc:mang; chon:array[1 max] of boolean; n,m,s,z:integer; u,v,i:integer; f,g:text; Procedure input; begin writeln('doc du lieu tu file Dijkstra.inp'); assign(f,'Dijkstra.inp');reset(f); readln(f,n,m,s,z); for u:=1 to n do for v:=1 to n do if u=v then a[u,v]:=0 else a[u,v]:=oo; for i:=1 to m do readln(f,u,v,a[u,v]); close(f); end; Procedure Init; Begin for v:=1 to n do begin d[v]:=a[s,v]; truoc[v]:=s; chon[v]:=false; end; d[s]:=0; chon[s]:=true; u:=s; End; Procedure Dijkstra; Var min:integer; Begin Repeat for v:=1 to z do if (not chon[v]) and (d[v] > d[u]+a[u,v]) then begin d[v]:= d[u] + a[u,v]; truoc[v]:=u; end; min:=oo; for i:=1 to n do if (not chon[i]) and (d[i]< min) then begin min:=d[i]; u:=i; end; if (min<> oo) then chon[u]:=true; Until (chon[z]) or (min=oo); End; Procedure Output; Var st,tam:string; Begin writeln('ghi ket qua ra file dijkstra.out'); assign(g,'dijkstra.out');rewrite(g); if d[z]=oo then writeln('NO') else begin writeln(g,'YES'); writeln(g,d[z]); st:=''; while (z<>s) do begin str(z,tam); st:=st+tam; z:=truoc[z]; end; write(g,s); for i:=length(st) downto 1 do write(g,' -> ',st[i]); end; close(g); end; BEGIN clrscr; input; init; dijkstra; output; readln; END. File vào ví dụ: (DIJKSTRA.INP) 4 7 1 4 1 2 7 1 3 5 2 4 6 2 3 7 3 4 11 4 1 4 4 2 1 File ra tương ứng: (DIJKSTRA.OUT) YES 13 1 -> 2 -> 4 . CÀI ĐẶT THUẬT TOÁN DIJKSTRA TÌM ĐƯỜNG ĐI NGẮN NHẤT BẰNG CHƯƠNG TRÌNH PASCAL Thuật toán Dijkstra. Chương trình thuật toán tìm đường đi ngắn nhất từ. dữ liệu, chương trình sẽ xác định có tồn tại đường đi ngắn nhất, tìm đường đi ngắn nhất đó và lưu vào tệp DIJKSTRA. OUT có cấu trúc: Dòng đầu : “NO” nếu

Ngày đăng: 03/07/2013, 21:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w