用C语言或Matlab编写一个 单源从一点到其它点最短路径长度 的程序

 我来答
scientist2031
2012-06-18 · 超过16用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:41.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程序 带界面窗体的也行留下邮箱我给你发过去
匿名用户
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
francy0527
2012-06-18 · TA获得超过260个赞
知道小有建树答主
回答量:118
采纳率:100%
帮助的人:103万
展开全部
什么叫做单源?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式