% 输入数据 n = 100;% or 1000 or 1000000 or 100000000 x = 2; % or 332 or 391 or 1010203 y = 5; % or 590 or 879 or 2033161 a = 1; % or 181 or 44324 or 18697 b = 12; % or 457 or 22503 or 2160 % 构建图 G = sparse(n*2-1, n*2-1); for i = 1:n-1 G(i, i+1) = y; % A集合内连边 G(n+i, n+i+1) = y; % B集合内连边 G(i, n+i) = x; % A集合与B集合之间连边 G(n+i+1, i+1) = x; % B集合与A集合之间连边 end % Dijkstra算法求最短路径 dist = inf(1, n*2-1); dist(a) = 0; visited = false(1, n*2-1); for i = 1:n*2-1 [~, u] = min(dist .* ~visited); if u == b break; end visited(u) = true; for v = 1:n*2-1 if G(u, v) > 0 && dist(u) + G(u, v) < dist(v) dist(v) = dist(u) + G(u, v); end end end % 输出结果 fprintf('最短距离为:%d\n', num2str(dist(b)));为什么这个程序运行出来有三个值
时间: 2024-03-26 08:34:16 浏览: 147
这个程序运行出来的结果应该只有一个值,即最短距离。可能是因为在输出结果的代码中使用了 `num2str` 函数,导致输出的是一个字符串形式的数字,而不是实际的数字。因此,应该将代码中的 `num2str` 删除,改为:
```matlab
fprintf('最短距离为:%d\n', dist(b));
```
这样就可以输出正确的最短距离了。
相关问题
% 输入数据 n = 100;% or 1000 or 1000000 or 100000000 x = 2; % or 332 or 391 or 1010203 y = 5; % or 590 or 879 or 2033161 a = 1; % or 181 or 44324 or 18697 b = 12; % or 457 or 22503 or 2160 % 构建图 G = sparse(n2-1, n2-1); for i = 1:n-1 G(i, i+1) = y; % A集合内连边 G(n+i, n+i+1) = y; % B集合内连边 G(i, n+i) = x; % A集合与B集合之间连边 G(n+i+1, i+1) = x; % B集合与A集合之间连边 end % Dijkstra算法求最短路径 dist = inf(1, n2-1); dist(a) = 0; visited = false(1, n2-1); for i = 1:n2-1 [~, u] = min(dist . ~visited); if u == b break; end visited(u) = true; for v = 1:n*2-1 if G(u, v) > 0 && dist(u) + G(u, v) < dist(v) dist(v) = dist(u) + G(u, v); end end end % 输出结果 fprintf('最短距离为:%d\n', num2str(dist(b)));为什么这个程序运行出来显示最短距离为inf
这个程序运行出来显示最短距离为 `inf`,可能是因为在构建图的代码中,变量名 `n2` 没有正确赋值,导致程序无法正确构建图。应该将代码中的 `n2` 改为 `n*2-1`,即:
```
G = sparse(n*2-1, n*2-1);
```
这样就可以正确构建图了。此外,还需要注意检查输入数据是否正确,特别是起点和终点是否在合法的范围内,否则也会导致输出最短距离为 `inf`。
阅读全文