hdu 1596(SPFA)

本文分享了一个使用SPFA算法解决实际问题的经历,通过对比Dijkstra算法,详细介绍了SPFA算法的具体实现过程,并附上了完整的C++代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题想用spfa算法实现,昨天看了很长时间没弄个一清二白,╮(╯▽╰)╭,今天早晨趁着精神好,赶紧看下,还真弄出来了,其实还是和dijkstra相差无几,只是昨个儿下午太不给力了,看来状态不好时真不能搞算法,不然越搞越昏,赔了时间又折煞自己的心情……

http://acm.hdu.edu.cn/showproblem.php?pid=1596

#include <iostream> #include<cstdio> #include<string.h> using namespace std; int n,m,st,ed,front,rear; double mat[1005][1005],dis[1005]; int v[1005],q[1000001]; void Spfa() { int p; while(front<rear)//模拟栈,直到栈为空 { p=q[front++]; v[p]=0; for(int i=0;i<n;i++) { if(mat[p][i]==0||p==i) continue; if(dis[p]*mat[p][i]>dis[i]) { dis[i]=dis[p]*mat[p][i]; if(!v[i]) { q[rear++]=i; v[i]=1; } } } } } int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%lf",&mat[i][j]); scanf("%d",&m); while(m--) { scanf("%d%d",&st,&ed); memset(v,0,sizeof(v)); memset(dis,0,sizeof(dis)); v[st-1]=dis[st-1]=1; front=0; rear=1; q[front]=st-1; Spfa(); if(dis[ed-1]!=0) printf("%.3lf\n",dis[ed-1]); else puts("What a pity!"); } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值