编写m文件,构造上图的邻接矩阵, 调用Dijkstra算法求出C1到C6的最短路径及最短路径长度,调用Floyd算法求出C2到C5的最短路径及最短路径长度。
时间: 2024-05-10 14:21:22 浏览: 4
首先,我们需要构造邻接矩阵:
```
% 构造邻接矩阵
A = [0, 3, 4, inf, inf, inf;
3, 0, 2, 5, inf, inf;
4, 2, 0, 1, 6, inf;
inf, 5, 1, 0, inf, 8;
inf, inf, 6, inf, 0, 7;
inf, inf, inf, 8, 7, 0];
```
接下来,我们调用Dijkstra算法求出C1到C6的最短路径及最短路径长度:
```
% Dijkstra算法求最短路径
start = 1; % 起点为C1
[dist, path] = dijkstra(A, start);
dest = 6; % 终点为C6
if dist(dest) == inf
disp('不存在路径');
else
% 输出最短路径及最短路径长度
fprintf('C%d到C%d的最短路径为:', start, dest);
p = dest;
while p ~= start
fprintf('C%d ', p);
p = path(p);
end
fprintf('C%d\n', start);
fprintf('最短路径长度为:%d\n', dist(dest));
end
```
最后,我们调用Floyd算法求出C2到C5的最短路径及最短路径长度:
```
% Floyd算法求最短路径
[dist, path] = floyd(A);
start = 2; % 起点为C2
dest = 5; % 终点为C5
if dist(start, dest) == inf
disp('不存在路径');
else
% 输出最短路径及最短路径长度
fprintf('C%d到C%d的最短路径为:', start, dest);
p = dest;
while p ~= start
fprintf('C%d ', p);
p = path(start, p);
end
fprintf('C%d\n', start);
fprintf('最短路径长度为:%d\n', dist(start, dest));
end
```
完整代码如下:
```
% 构造邻接矩阵
A = [0, 3, 4, inf, inf, inf;
3, 0, 2, 5, inf, inf;
4, 2, 0, 1, 6, inf;
inf, 5, 1, 0, inf, 8;
inf, inf, 6, inf, 0, 7;
inf, inf, inf, 8, 7, 0];
% Dijkstra算法求最短路径
start = 1; % 起点为C1
[dist, path] = dijkstra(A, start);
dest = 6; % 终点为C6
if dist(dest) == inf
disp('不存在路径');
else
% 输出最短路径及最短路径长度
fprintf('C%d到C%d的最短路径为:', start, dest);
p = dest;
while p ~= start
fprintf('C%d ', p);
p = path(p);
end
fprintf('C%d\n', start);
fprintf('最短路径长度为:%d\n', dist(dest));
end
% Floyd算法求最短路径
[dist, path] = floyd(A);
start = 2; % 起点为C2
dest = 5; % 终点为C5
if dist(start, dest) == inf
disp('不存在路径');
else
% 输出最短路径及最短路径长度
fprintf('C%d到C%d的最短路径为:', start, dest);
p = dest;
while p ~= start
fprintf('C%d ', p);
p = path(start, p);
end
fprintf('C%d\n', start);
fprintf('最短路径长度为:%d\n', dist(start, dest));
end
```