//最短路径问题 SPFA算法
#include<iostream>
#include<queue>
using namespace std;
int map[102][102],dis[102],vis[102],n;
int main()
{
int i,j;
queue<int> q;
scanf("%d",&n);
memset(map,INT_MAX,sizeof(map));
for(i=0;i<102;i++) //这里应该用for循环初始化,memset函数只能将值初始化为0或者-1。
{
dis[i] = INT_MAX;
}
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
}
dis[1]=0;
q.push(vis[1]=1);
while(!q.empty())
{
int v=q.front();
q.pop();
vis[v]=false;
for(i=1;i<=n;i++)
if(dis[i]>dis[v]+map[v][i])
{
dis[i]=dis[v]+map[v][i];
if(!vis[i])
{
q.push(i);
vis[i]=true;
}
}
}
printf("%d\n",dis[n]);
return 0;
}
最短路径问题 SPFA算法
最新推荐文章于 2022-12-09 11:47:22 发布
本文介绍了一种使用SPFA算法求解图中两点间最短路径的方法。通过邻接矩阵存储图,并利用队列实现节点的遍历,确保算法高效地找到从起点到任意节点的最短路径。
7万+

被折叠的 条评论
为什么被折叠?



