社区讨论
我这个蒟蒻又来求助了
P3371【模板】单源最短路径(弱化版)参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi86b3k1
- 此快照首次捕获于
- 2025/11/21 09:20 4 个月前
- 此快照最后确认于
- 2025/11/21 09:20 4 个月前
这次是spfa
CPP#include<iostream>
#include<queue>
#define maxn 2147483647
using namespace std;
int n,m,s;
queue<int> q;//spfa队列
struct Edge{
int f,g,w;
}edge[500005];
int first[10005],next[500005];//链式前向星存图
int vis[10005],dis[10005],k,kk;//vis数组(spfa)标记是否在队列里,dis数组记录距离
void spfa(){
q.push(s);
vis[s]=1;
while(!q.empty()){
k=q.front();
q.pop();
vis[k]=0;
//cout<<k<<" ";
kk=k;
while(k!=-1){
if(dis[edge[k].g]>dis[kk]+edge[k].w){
dis[edge[k].g]=dis[kk]+edge[k].w;
//cout<<edge[k].g<<" "<<dis[edge[k].g]<<" ";
if(vis[edge[k].g]==0){
//cout<<edge[k].g<<" ";
q.push(edge[k].g);
vis[edge[k].g]=1;
}
}
k=next[k];
//cout<<"\n";
}
}
//cout<<"\n";
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
first[i]=-1;
vis[i]=0;//全局变量初始值为0,仅是保险起见
dis[i]=(i==s?0:maxn);
}//初始化
for(int i=1;i<=m;i++){
cin>>edge[i].f>>edge[i].g>>edge[i].w;
next[i]=first[edge[i].f];
first[edge[i].f]=i;
}//存图
spfa();
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...