#include<queue>
#include<vector>
#define M 105
#define INF 0x3f3f3f3f
int dis[M];//储存最短路径
int vis[M];//标记该点是否在队列当中
int path[M];
int inque[M];//统计次数
int n,m;//n个点,m条边
struct edge{
int to;//当前点的下一顶点
int cost;//两点之间的权值
};
vector<edge> maps[M];
bool spfa(int s){
for(int i=0;i<=n;i++){
dis[i]=INF;
}
queue<int> q;
dis[s]=0;//初始数组
q.push(s);//顶点
inque[s]=1;
while(!q.empty()){
int u=q.front();//取首
q.pop();
vis[u]=0;
for(int i=0;i<maps[u].size();i++){
int to=maps[u][i].to;//下一个顶点
if(dis[u]+maps[u][i].cost<dis[to]){
dis[to]=dis[u]+maps[u][i];
if(!vis[to]){
vis[to]=1;
inque[to]++;
q.push(to);
if(inque[to]>n){
return false;
}
}
}
}
}
return true;
}
spfa 简单代码
最新推荐文章于 2024-04-12 00:18:32 发布