zoj 3088 spfa 最短&最长路径
来源:互联网 发布:家庭健身器材 知乎 编辑:程序博客网 时间:2024/05/17 06:30
一看就知道要建立两个图- -
主要对图的初始化
spfa 求最长最短路径
#include <queue>#include <vector>#include <cstdio>#include<string.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;int n,m,k;int down[1010][1010],up[1010][1010];int distdown[1010],distup[1010];int pathdown[1010],pathup[1010];int pathans[2020],id;inline void read(int &m){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}m=x*f;}void f(int temp){if(pathup[temp]==-1)return;f(pathup[temp]);pathans[id++]=temp;}void copypath(int i,int j){id=1;pathans[id++]=i;f(j);while(pathdown[j]!=-1){pathans[id++]=pathdown[j];j=pathdown[j];}}void spfa_down(int k) //spfa求最长路径{bool vis[1010];memset(vis,0,sizeof(vis));memset(distdown,0,sizeof(distdown)); //比图的无限小稍微大queue<int>que;vis[k]=1;pathdown[k]=-1;que.push(k);while(!que.empty()){int v=que.front();que.pop();vis[v]=0;for(int i=1;i<=n;i++)if(distdown[v]+down[v][i]>distdown[i]){distdown[i]=distdown[v]+down[v][i];pathdown[i]=v;if(!vis[i])vis[i]=1,que.push(i);}}}void spfa_up(int k) //spfa求最短路径{bool vis[1010];memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)distup[i]=100000000; //比图的无限大稍微小。不过正常来说令其与图相等,即无限大vis[k]=1;distup[k]=0;pathup[k]=-1;queue<int>que;que.push(k);while(!que.empty()){int v=que.front();que.pop();vis[v]=0;for(int i=1;i<=n;i++)if(distup[v]+up[v][i]<distup[i]){distup[i]=distup[v]+up[v][i];pathup[i]=v;if(!vis[i])vis[i]=1,que.push(i);}}}int main(){int cas,a,b,c;read(cas);while(cas--){read(n),read(m),read(k);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)up[i][j]=100000000,down[i][j]=-10000000;//将图设为正无限大,负无限大for(int i=1;i<=m;i++){read(a),read(b),read(c);down[b][a]=c;//反转}for(int i=1;i<=k;i++){read(a),read(b),read(c);up[a][b]=c;}double maxn=0;for(int i=1;i<=n;i++){spfa_down(i);spfa_up(i);for(int j=1;j<=n;j++)if(i==j)continue;else if(distdown[j]!=0&&distup[j]!=10000000){double d=1.0*distdown[j]/distup[j];if(d>maxn){maxn=d;copypath(i,j);}}}for(int i=1;i<id;i++)printf("%d ",pathans[i]);printf("\n%.3f\n",maxn);}return 0;}
0 0
- zoj 3088 spfa 最短&最长路径
- spfa最短路径
- 最短路径spfa
- spfa 最短路径
- 最短路径 -- spfa
- SPFA最短路径
- SPFA--最短路径
- zoj 3088 Easter Holidays (SPFA 求最长路 最短路 + 打印路径)
- 最短路径算法---SPFA
- 最短路径----SPFA算法
- 最短路径之 SPFA
- 【最短路径】SPFA算法
- SPFA算法【最短路径】
- SPFA最短路径模板
- 最短路径问题/Spfa
- 最短路径SPFA算法
- 【模板】最短路径spfa
- 最短路径-zoj-2797
- chm文件打开看不到内容的问题
- 我所认为正确的工作方式
- OC学习(四)不可变字符串类和可变字符串类
- 【DP】HDU1421 搬寝室
- 美军综合电子信息系统
- zoj 3088 spfa 最短&最长路径
- linux内核之container_of()应用
- SecondPage master
- android adb 连接电脑,没有在eclipse里面显示连接。
- jQuery实现按比例缩放图片
- Java基础学习总结
- 整理音乐
- 初用visual studio2013时遇到的头文件问题
- JQuery中$.ajax()方法参数详解