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

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

你想要哪个算法的, DIJSTRA还是spfa算法 是否需要优化 dijstra可以用堆优化 spfa可以前向星优化 LST优化

这个是SPFA的程序

#include<stdioh>

#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程序 带界面窗体的也行留下邮箱我给你发过去

4.

常用算法演示程序

题目:编写常用算法的演示程序

参考:下面算法选择一种实现

矩阵旋转算法

Prim算法

拷贝链表的O(n)算法

随机算法

大数阶乘源码

格雷码算法

算术表达式的计算

寻找链表中间节点算法

模式匹配的KMP算法

最小堆/哈希表/二叉树/平衡二叉树/红黑树

最小生成树

Kruskal算法:(贪心)

最短路径Dijkstra

算法

以上就是关于用C语言或Matlab编写一个 单源从一点到其它点最短路径长度 的程序全部的内容,包括:用C语言或Matlab编写一个 单源从一点到其它点最短路径长度 的程序、急求最短路径算法程序,用C语言或C++、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9420014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存