一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例

图信息文件一        CityGraph.txt

NodeNum = 25

Node0 = (1,242)
Node1 = (0,242)(2,305)
Node2 = (1,305)(3,397)(4,704)
Node3 = (2,397)
Node4 = (2,704)(5,674)(14,137)
Node5 = (4,674)(6,651)(13,349)
Node6 = (5,651)(7,825)
Node7 = (6,825)(8,622)(9,367)
Node8 = (7,622)
Node9 = (7,367)(10,675)(12,409)(22,902)(23,672)
Node10 = (9,675)(11,140)
Node11 = (10,140)
Node12 = (9,409)(13,534)
Node13 = (5,349)(12,534)(14,695)(19,511)
Node14 = (4,137)(13,695)(15,668)
Node15 = (14,668)(16,1145)
Node16 = (15,1145)(17,216)(18,1892)(19,676)
Node17 = (16,216)
Node18 = (16,1892)
Node19 = (13,511)(16,676)(20,842)
Node20 = (19,842)(21,1100)(22,967)
Node21 = (20,1100)(22,639)
Node22 = (9,902)(20,967)(21,639)
Node23 = (9,672)(22,607)(24,255)
Node24 = (23,255)

图信息文件二       CityPosition.txt

0(37,5)
1(34,8)
2(31,11)
3(30,14)
4(26,13)
5(26,17)
6(31,20)
7(25,23)
8(31,26)
9(20,24)
10(20,30)
11(24,32)
12(21,20)
13(20,16)
14(21,11)
15(15,9)
16(10,14)
17(6,13)
18(3,5)
19(14,17)
20(12,22)
21(10,27)
22(14,26)
23(17,28)
24(15,32)

图信息文件三       CityID.txt

0 (哈尔滨)
1 (长春)
2 (沈阳)
3 (大连)
4 (天津)
5 (徐州)
6 (上海)
7 (南京)
8 (福州)
9 (株洲)
10 (广州)
11 (深圳)
12 (武汉)
13 (郑州)
14 (北京)
15 (呼和浩特)
16 (兰州)
17 (西宁)
18 (乌鲁木齐)
19 (西安)
20 (成都)
21 (昆明)
22 (贵阳)
23 (柳州)
24 (南宁)

Inputs: [AorV] Either A or V where A is a NxN adjacency matrix, where A(I,J) is nonzero if and only if an edge connects point I to point J NOTE: Works for both symmetric and asymmetric A V is a Nx2 (or Nx3) matrix of x,y,(z) coordinates [xyCorE] Either xy or C or E (or E3) where xy is a Nx2 (or Nx3) matrix of x,y,(z) coordinates (equivalent to V) NOTE: only valid with A as the first input C is a NxN cost (perhaps distance) matrix, where C(I,J) contains the value of the cost to move from point I to point J NOTE: only valid with A as the first input E is a Px2 matrix containing a list of edge connections NOTE: only valid with V as the first input E3 is a Px3 matrix containing a list of edge connections in the first two columns and edge weights in the third column NOTE: only valid with V as the first input [SID] (optional) 1xL vector of starting points. If unspecified, the algorithm will calculate the minimal path from all N points to the finish point(s) (automatically sets SID = 1:N) [FID] (optional) 1xM vector of finish points. If unspecified, the algorithm will calculate the minimal path from the starting point(s) to all N points (automatically sets FID = 1:N) Outputs: [costs] is an LxM matrix of minimum cost values for the minimal paths [paths] is an LxM cell containing the shortest path arrays [showWaitbar] (optional) a scalar logical that initializes a waitbar if nonzero Note: If the inputs are [A,xy] or [V,E], the cost is assumed to be (and is calculated as) the point to point Euclidean distance If the inputs are [A,C] or [V,E3], the cost is obtained from either the C matrix or from the edge weights in the 3rd column of E3 Example: % Calculate the (all pairs) shortest distances and paths using [A,C] inputs n = 7; A = zeros(n); xy = 10*rand(n,2) tri = delaunay(xy(:,1),xy(:,2)); I = tri(:); J = tri(:,[2 3 1]); J = J(:); IJ = I + n*(J-1); A(IJ) = 1 a = (1:n); b = a(ones(n,1),:); C = round(reshape(sqrt(sum((xy(b,:) - xy(b',:)).^2,2)),n,n)) [costs,paths] = dijkstra(A,C) Example: % Calculate the shortest distance and path from point 3 to 5 n = 15; A = zeros(n); xy = 10*rand(n,2) tri = delaunay(xy(:,1),xy(:,2)); I = tri(:); J = tri(:,[2 3 1]); J = J(:); IJ = I + n*(J-1); A(IJ) = 1 [cost,path] = dijkstra(A,xy,3,5) gplot(A,xy,'b.:'); hold on; plot(xy(path,1),xy(path,2),'ro-','LineWidth',2) for k = 1:n, text(xy(k,1),xy(k,2),[' ' num2str(k)],'Color','k'); end Example: % Calculate the shortest distances and paths from the 3rd point to all the rest n = 7; V = 10*rand(n,2) I = delaunay(V(:,1),V(:,2)); J = I(:,[2 3 1]); E = [I(:) J(:)] [costs,paths] = dijkstra(V,E,3) Example: % Calculate the shortest distance and path from points [1 3 4] to [2 3 5 7] n = 7; V = 10*rand(n,2) I = delaunay(V(:,1),V(:,2)); J = I(:,[2 3 1]); E = [I(:) J(:)] [costs,paths] = dijkstra(V,E,[1 3 4],[2 3 5 7]) Revision Notes: (3/13/15) Previously, this code ignored edges that have a cost of zero, potentially producing an incorrect result when such a condition exists. I have solved this issue by using NaNs in the table rather than a sparse matrix of zeros.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值