最短路径——SPFA算法(C++)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径——SPFA算法(C++)相关的知识,希望对你有一定的参考价值。
源代码:
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue <int> h;
int i[1001][1001],j[1001],n,k; //要想节省空间,会不会有更好的方法呢?
bool f[1001]={0};
int main()
{
memset(i,0x3f,sizeof(i));
memset(j,0x3f,sizeof(j));
scanf("%d%d",&n,&k);
for (int a=1;a<=n;a++)
for (int b=1;b<=n;b++)
{
int t;
scanf("%d",&t);
if (t!=-1)
i[a][b]=t;
} //矩阵输入。
j[k]=0;
f[k]=true;
h.push(k);
while (h.size())
{
int t=h.front();
for (int a=1;a<=n;a++)
if (i[t][a]+j[t]<j[a])
{
j[a]=i[t][a]+j[t];
if (!f[a])
{
f[a]=true;
h.push(a);
}
}
h.pop();
} //利用队列除去冗余运算,从而进行显著的优化。
for (int a=1;a<=n;a++)
printf("%d ",j[a]);
return 0;
}
以上是关于最短路径——SPFA算法(C++)的主要内容,如果未能解决你的问题,请参考以下文章