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

Cài đặt thuật toán Floyd-warshall tìm đường đi ngắn nhất giữa mọi cạp đỉnh trong đồ thị có hướng có trọng số.

4 5,9K 80
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

Tiêu đề Cài đặt thuật toán Floyd-warshall tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong đồ thị có hướng có trọng số
Trường học University of Information Technology
Chuyên ngành Computer Science
Thể loại bài báo
Thành phố Hồ Chí Minh
Định dạng
Số trang 4
Dung lượng 41 KB

Nội dung

CÀI ĐẶT THUẬT TOÁN FLOYD-WARSHALL TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA MỌI CẶP ĐỈNH TRONG ĐỒ THỊ CÓ HƯỚNG CÓ TRỌNG SỐ BẰNG CHƯƠNG TRÌNH PASCAL.. Thuật toán Floyd-warshall.. Chương trình dùng thuậ

Trang 1

CÀI ĐẶT THUẬT TOÁN FLOYD-WARSHALL TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA MỌI CẶP ĐỈNH TRONG ĐỒ THỊ CÓ HƯỚNG CÓ TRỌNG SỐ BẰNG

CHƯƠNG TRÌNH PASCAL.

Thuật toán Floyd-warshall.

Chương trình dùng thuật toán Floyd-warshall tìm đường

đi ngắn nhất giữa mọi cạp đỉnh trong đồ thị có hướng có trọng số

Dữ liệu được lấy từ tệp FLOYD-WARSHALL.INP có cấu trúc :

n (số đỉnh)

m (số cạnh)

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 FLOYD-WARSHALL.OUT có cấu trúc:

D ma trận độ dài đường đi ngắn nhất giữa

mọi cặp đỉnh

P ma trận định đường đi ngắn nhất giữa

mọi cặp

Trang 2

Chương trình: (FLOYDWAR.PAS)

program floyd_war;

uses crt;

var p,d:array[1 100,1 100] of integer; f:text;

n,m,w:integer;

procedure input;

var i,k,x,trongso:integer;

begin

assign(f,'floydwar.inp');reset(f); readln(f,n,m);

for i:=1 to m do

begin

readln(f,k,x,trongso);

d[k,x]:=trongso;

end;

close(f);

end;

procedure init;

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

if(d[i,j]=0)then

d[i,j]:=300

else p[i,j]:=j;

end;

procedure floydwar;

var k,i,j:integer;

begin

k:=1;

while(k<=n) do

begin

for i:=1 to n do

Trang 3

for j:=1 to n do

if(d[i,j]>d[i,k]+d[k,j]) then begin

d[i,j]:=d[i,k]+d[k,j];

p[i,j]:=p[i,k];

end

else

begin

d[i,j]:=d[i,j];

p[i,j]:=p[i,j];

end;

inc(k);

end;

end;

procedure output;

var i,j:integer;

begin

assign(f,'floydwar.out');rewrite(f); for i:=1 to n do

begin

for j:=1 to n do

write(f,d[i,j]:10);

writeln(f);

end;

writeln(f);

for i:=1 to n do

begin

for j:=1 to n do

write(f,p[i,j]:10);

writeln(f);

end;

close(f);

end;

BEGIN

clrscr;

Trang 4

input;

init;

floydwar;

output;

write('xem ket qua trong file:floydwar.out'); readln;

END

File vào ví dụ: (FLOYDWAR.INP)

4 7

1 2 7

1 3 5

2 3 7

2 4 6

3 4 11

4 1 4

4 2 1

File ra tương ứng: (FLOYDWAR.OUT)

17 7 5 13

10 7 7 6

15 12 19 11

4 1 8 7

2 2 3 2

4 4 3 4

4 4 4 4

1 2 2 2

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