求从任意一个顶点Vi出发,对给出的图,求到达任意顶点Vj(ij)的所有最短路径.
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/17 14:31:43
求从任意一个顶点Vi出发,对给出的图,求到达任意顶点Vj(i<>j)的所有最短路径.
const d:array[1..8,1..4] of byte=((2,3,4,0),(1,3,7,0),(1,2,4,5),(1,3,6,0),(3,6,7,8),(4,5,8,0),(2,5,8,0),(5,6,7,0));
n:array[1..8] of byte=(3,3,4,3,4,3,3,3);
var l,b:array[1..64] of byte;
f,r,h,m,st,ed,I,j,t,k,s,p,w:byte;
g:array[1..10] of byte;
e:array[1..8] of 0..1;
c:array[1..8,1..8]of byte;
bb:boolean;
begin
write('start:');readln(st);
write('end:');readln(ed);
fillchar(e,sizeof(e),0); {标记数组清零}
fillchar(c,sizeof(c),0); {路径数组清零}
f:=0;r:=1;
l[r]:=st;h:=1;w:=1;
bb:=true;
while bb do
begin
h:=h+1;g[h]:=r+1; {记录h+1层的首地址}
for i:=1 to w do
begin
f:=f+1;m:=l[f];e[m]:=1; {取队首结点,并设访问过标记}
for t:=1 to n[m] do {依次访问m结点的相邻结点}
if e[d[m,t]]=0 then {若m的相邻结点没有访问过}
begin
r:=r+1;l[r]:=d[m,t];b[r]:=f; {则进队列}
end;
end;
w:=r+1-g[h]; {计算第h层的新结点数目}
s:=0;
for k:=g[h] to r do {检查第h层上的新结点是否存在目标结点}
if l[k]=ed then {等于目标结点}
begin
s:=s+1;p:=b[k];j:=1;
c[s,j]:=L[k];
while p1 do
begin j:=j+1;c[s,j]:=L[p];p:=b[p]; end;
j:=j+1;c[s,j]:=L[p];
for t:=j downto 1 do
if t=1 then writeln(c[s,t]) else write(c[s,t],'->');
end;
if s0 then
begin
writeln(st,'->',ed);
writeln('total=',s,' step=',j-1);
bb:=false;
end;
end;
end.
n:array[1..8] of byte=(3,3,4,3,4,3,3,3);
var l,b:array[1..64] of byte;
f,r,h,m,st,ed,I,j,t,k,s,p,w:byte;
g:array[1..10] of byte;
e:array[1..8] of 0..1;
c:array[1..8,1..8]of byte;
bb:boolean;
begin
write('start:');readln(st);
write('end:');readln(ed);
fillchar(e,sizeof(e),0); {标记数组清零}
fillchar(c,sizeof(c),0); {路径数组清零}
f:=0;r:=1;
l[r]:=st;h:=1;w:=1;
bb:=true;
while bb do
begin
h:=h+1;g[h]:=r+1; {记录h+1层的首地址}
for i:=1 to w do
begin
f:=f+1;m:=l[f];e[m]:=1; {取队首结点,并设访问过标记}
for t:=1 to n[m] do {依次访问m结点的相邻结点}
if e[d[m,t]]=0 then {若m的相邻结点没有访问过}
begin
r:=r+1;l[r]:=d[m,t];b[r]:=f; {则进队列}
end;
end;
w:=r+1-g[h]; {计算第h层的新结点数目}
s:=0;
for k:=g[h] to r do {检查第h层上的新结点是否存在目标结点}
if l[k]=ed then {等于目标结点}
begin
s:=s+1;p:=b[k];j:=1;
c[s,j]:=L[k];
while p1 do
begin j:=j+1;c[s,j]:=L[p];p:=b[p]; end;
j:=j+1;c[s,j]:=L[p];
for t:=j downto 1 do
if t=1 then writeln(c[s,t]) else write(c[s,t],'->');
end;
if s0 then
begin
writeln(st,'->',ed);
writeln('total=',s,' step=',j-1);
bb:=false;
end;
end;
end.
图改用邻接表表示,重写Dijkstra算法.输入任意带权有向图,输出每一对顶点间的最短路径及其权值.
求java实现矩阵图上任意两点的最短路径源码
设计一个非递归算法判断以邻接方式存储的向图中是否存在由顶点Vi到Vj的路径.急.有哪位高手帮忙.
已知带权有向图如图7-29所示,请利用Dijkstra算法从顶点V4出发到其余顶点的最短路径及长度,
(用Dijkstra算法)求出图中顶点1到其余各顶点的最短路径
无向图,算法求思路有一个无向图,给定图中的起点和终点,从起点出发,将图中的所有点都走一遍,并从终点出来,要求走的路径最短
如图,一只蜘蛛要从长方体的一个顶点A爬到另一个顶点C,哪条路径最短?请按图中尺寸加以说明.(我画的图可能不太精确)
以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法
数据结构作业 求最短路径 试设计一个算法求图中一个源点到其他个顶点的最短路径.
跪求迷宫最短路径 迷宫最短路径 从一个迷宫的入口到出口找出一条最短路经.用一个二维数
任意一个十边形从一个顶点出发连接各顶点可分成几个三角形
试用Dijkstra算法求从v1到其余各顶点的最短路径,写出每一步的状态.算法我会,主要是步奏!下图为题目图,还有就是谁