
你想要哪个算法的, 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++、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)