用C语言或Matlab编写一个 单源从一点到其它点最短路径长度 的程序
3个回答
展开全部
你想要哪个算法的, DIJSTRA还是spfa算法 是否需要优化 dijstra可以用堆优化 spfa可以前向星优化 LST优化
这个是SPFA的程序:
#include<stdio.h>
#define maxint 2139062143
int a[101][101],dist[101],n;
void spfa(int s)
{ int q[101],v[101],h=0,t=1,x,i;//q为队列,v为Boolean数组,表示结点是否在队列中,h为头指针,t为尾指针
memset(q,0,sizeof(q));
memset(v,0,sizeof(v));
for(i=0;i<101;i++)//这里应该用for循环初始化,memset函数只能将值初始化为0或者-1。
dist[i] = INT_MAX;
dist[s]=0;
q[t]=s;v[s]=1;
while(h!=t)//
{ h=(h+1)%(n+1);//
x=q[h];
v[x]=0;
for(i=1;i<=n;i++)
if(dist[i]-a[x][i]>dist[x])//这里本来为dist[i]>dist[x]+a[x][i],但这样会越界的,因为后两者加起来太大 { dist[i]=dist[x]+a[x][i];
if(!v[i])
{
t=(t+1)%(n+1)/*同上*/;q[t]=i;v[i]=1;
}
}
}
}
int main()
{
int m,s,t,i;
scanf("%d%d",&n,&m);
scanf("%d%d",&s,&t);
memset(a,127,sizeof(a));
for(i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;
}
spfa(s);
printf("%d",dist[t]);
system("pause");
return 0;
}
你想要MFC程序 带界面窗体的也行留下邮箱我给你发过去
这个是SPFA的程序:
#include<stdio.h>
#define maxint 2139062143
int a[101][101],dist[101],n;
void spfa(int s)
{ int q[101],v[101],h=0,t=1,x,i;//q为队列,v为Boolean数组,表示结点是否在队列中,h为头指针,t为尾指针
memset(q,0,sizeof(q));
memset(v,0,sizeof(v));
for(i=0;i<101;i++)//这里应该用for循环初始化,memset函数只能将值初始化为0或者-1。
dist[i] = INT_MAX;
dist[s]=0;
q[t]=s;v[s]=1;
while(h!=t)//
{ h=(h+1)%(n+1);//
x=q[h];
v[x]=0;
for(i=1;i<=n;i++)
if(dist[i]-a[x][i]>dist[x])//这里本来为dist[i]>dist[x]+a[x][i],但这样会越界的,因为后两者加起来太大 { dist[i]=dist[x]+a[x][i];
if(!v[i])
{
t=(t+1)%(n+1)/*同上*/;q[t]=i;v[i]=1;
}
}
}
}
int main()
{
int m,s,t,i;
scanf("%d%d",&n,&m);
scanf("%d%d",&s,&t);
memset(a,127,sizeof(a));
for(i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;
}
spfa(s);
printf("%d",dist[t]);
system("pause");
return 0;
}
你想要MFC程序 带界面窗体的也行留下邮箱我给你发过去
2012-06-18
展开全部
不要忘记100分!
m=size(B,2);
n=mm;
[B,i]=sortrows(B',3);
B=B';
t=1:n;k=0;T=[];c=0;
for i= 1:m
if t(B(1,i))~=t(B(2,i))
k=k+1;T(k,1:2)=B(1:2,i);c=c+B(3,i)
tmin=min(t(B(1,i)),t(B(2,i)));
tmax=max(t(B(1,i)),t(B(2,i)));
for j=1:n
if t(j)==tmax
t(j)= tmin;
end
end
end
if k==n-1
break;
end
end
%-------最短路径长度的程序--------------
T,c
m=size(B,2);
n=mm;
[B,i]=sortrows(B',3);
B=B';
t=1:n;k=0;T=[];c=0;
for i= 1:m
if t(B(1,i))~=t(B(2,i))
k=k+1;T(k,1:2)=B(1:2,i);c=c+B(3,i)
tmin=min(t(B(1,i)),t(B(2,i)));
tmax=max(t(B(1,i)),t(B(2,i)));
for j=1:n
if t(j)==tmax
t(j)= tmin;
end
end
end
if k==n-1
break;
end
end
%-------最短路径长度的程序--------------
T,c
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么叫做单源?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询