最短路问题,用Bellman算法判断有无正向环。
1 #include <stdio.h> 2 double M[105],orig; 3 int m,n,s; 4 typedef struct 5 { 6 int u,v; 7 double r,c; 8 void init(int a,int b,double q,double p) 9 {u = a; v = b; r = q; c = p;} 10 }Edge; 11 Edge ed[205]; 12 void read_graph() 13 { 14 int a,b,i; 15 double q,w,e,r; 16 for(i = 1; i <= n; i++) 17 M[i] = 0.0; 18 for(i = 0; i < m; i++) 19 { 20 scanf("%d%d%lf%lf%lf%lf",&a,&b,&q,&w,&e,&r); 21 ed[i<<1].init(a,b,q,w); 22 ed[i<<1|1].init(b,a,e,r); 23 } 24 } 25 bool Bellman() 26 { 27 int i,j,u,v; 28 double r,c; 29 bool ok; 30 M[s] = orig; 31 for(j = 1; j < n; j++) 32 { 33 ok = 1; 34 for(i = 0; i < 2*m; i++) 35 { 36 u = ed[i].u; v = ed[i].v; 37 r = ed[i].r; c = ed[i].c; 38 if((M[u]-c)*r > M[v]) 39 {M[v] = (M[u]-c)*r; ok = 0;} 40 } 41 if(ok) break; 42 } 43 for(i = 0; i < 2*m; i++) 44 { 45 u = ed[i].u; v = ed[i].v; 46 r = ed[i].r; c = ed[i].c; 47 if((M[u]-c)*r > M[v]) 48 return 1; 49 } 50 return 0; 51 } 52 int main() 53 { 54 while(~scanf("%d%d%d%lf",&n,&m,&s,&orig)) 55 { 56 read_graph(); 57 if(Bellman()) 58 printf("YES\n"); 59 else printf("NO\n"); 60 } 61 return 0; 62 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥