poj1502 - MPI Maelstrom
来源:互联网 发布:ubuntu下安装jenkins 编辑:程序博客网 时间:2024/05/17 09:23
想看更多的解题报告:http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题意:
给你一个不完全的矩阵,数字表示权值,x表示两点间不可达
由于自身到自身花费的时间为0,所以没有给出,由于i到j和j到i距离相同,互达时间相同
所以只给出了一半的临界矩阵。
根据给你的这个临界矩阵,让你来求从点1到其他点所花费最短时间集里面的的最大值。
其实这是一个很直接的最短路
为了向熟悉下各个最短路的模板,将所有的模板都用了对比下,写了一遍最短路径
/*dijstraMemory 160KTime 0MS*/#include <iostream>#include <string.h>using namespace std;#define MAXV 102#define INF 100000int map[MAXV][MAXV],n;void dijstra(){int i,j,ans=-1,min,v;int d[MAXV],vis[MAXV];//d数组表示从原点到i点的最短距离//vis用于表达这个点是否已经被选中for(i=1;i<=n;i++){d[i]=INF;vis[i]=0;}d[1]=0;//因为start到start的距离为0,这里源点为1for(i=1;i<=n;i++){min=INF;for(j=1;j<=n;j++){//每次找点的过程,首先这个点没有被发现,然后找一个最小点if(!vis[j] && d[j]<min){min=d[j];v=j;}}//这里为什么找的最小的边就一定是最短路呢//因为一个图要连通起来,就必须有一条边和已知点集连起来,所以找的最小的未知点必是最短路vis[v]=1;for(j=1;j<=n;j++)//加进最小点后,再修改从源点没有被发现的点的最短路径if(!vis[j] && d[v]+map[v][j]<d[j])d[j]=d[v]+map[v][j];}for(i=2;i<=n;i++)if(d[i]>ans) ans=d[i];printf("%d\n",ans);}int main(){char s[10];int i,j;while(~scanf("%d\n",&n)){for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i!=j)map[i][j]=INF;elsemap[i][j]=0;for(i=2;i<=n;i++)for(j=1;j<i;j++){scanf("%s",s);if(s[0]!='x')map[i][j]=map[j][i]=atoi(s);//将字符串转换为数字}dijstra();}return 0;}
=============================================================
/*bellman-fordMemory 152KTime 16MS*/#include <iostream>#include <string.h>using namespace std;#define MAXE 10002#define MAXV 102#define INF 100000struct {int s,e,w;}t[MAXE];int n,m;void bellman_ford(){int i,j,ans=-1,start=1;int d[MAXV];for(i=1;i<=n;i++) d[i]=INF;d[start]=0; for (i=1;i<n;i++){//重复进行n-1次收缩for (j=0;j<m;j++){//对每条边进行收缩if (d[t[j].s]+t[j].w<d[t[j].e]) d[t[j].e]=d[t[j].s]+t[j].w;//分别对每条边的两个顶点分别进行收缩if (d[t[j].e]+t[j].w<d[t[j].s]) d[t[j].s]=d[t[j].e]+t[j].w; } }for(i=2;i<=n;i++)if(d[i]>ans) ans=d[i];printf("%d\n",ans);}int main(){char s[10];int i,j;while(~scanf("%d\n",&n)){m=0;for(i=2;i<=n;i++)for(j=1;j<i;j++){scanf("%s",s);if(s[0]!='x'){t[m].w=atoi(s);t[m].s=i;t[m++].e=j;}}bellman_ford();}return 0;}
============================================================================
/*spfa 邻接表Memory 208KTime 16MS*/#include <iostream>#include <queue>#include <string.h>using namespace std;#define MAXE 10002#define MAXV 102#define INF 100000struct {int s,e,w,next;}t[MAXE];int n,m,headlist[MAXV];void spfa(){int i,ans=-1,start=1,v,b;int d[MAXV],vis[MAXV];queue <int>q;for(i=1;i<=n;i++){d[i]=INF;vis[i]=0;}d[start]=0;vis[start]=1;q.push(start);while(!q.empty()){v=q.front();q.pop();vis[v]=0;for(i=headlist[v];i!=-1;i=t[i].next){b=t[i].s;if(d[v]+t[i].w<d[b]){d[b]=d[v] + t[i].w;if(!vis[b]){vis[b]=1;q.push(b);}}}}for(i=2;i<=n;i++)if(d[i]>ans) ans=d[i];printf("%d\n",ans);}int main(){char s[10];int i,j;while(~scanf("%d\n",&n)){for(i=1;i<=n;i++) headlist[i]=-1;m=0;for(i=2;i<=n;i++)for(j=1;j<i;j++){scanf("%s",s);if(s[0]!='x'){//无向图的spfa的边要存两遍t[m].w=atoi(s);t[m].s=i;t[m].e=j;t[m].next=headlist[j];headlist[j]=m++;t[m].w=atoi(s);t[m].s=j;t[m].e=i;t[m].next=headlist[i];headlist[i]=m++;}}spfa();}return 0;}
===================================================================================
/*spfa邻接矩阵Memory 172KTime 0MS*/#include <iostream>#include <string.h>#include <queue>using namespace std;#define MAXV 102#define INF 100000int map[MAXV][MAXV],n;void spfa(){int i,j,ans=-1,v,start=1;int d[MAXV],vis[MAXV];queue <int>q;for(i=1;i<=n;i++){d[i]=INF;vis[i]=0;}q.push(start);d[start]=0;vis[start]=1;while(!q.empty()){v=q.front();q.pop();vis[v]=0;for(i=1;i<=n;i++){if(d[i]>d[v]+map[v][i]){d[i]=d[v]+map[v][i];if(!vis[i]){q.push(i);vis[i]=1;}}}}for(i=2;i<=n;i++)if(d[i]>ans) ans=d[i];printf("%d\n",ans);}int main(){char s[10];int i,j;while(~scanf("%d\n",&n)){for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i!=j)map[i][j]=INF;elsemap[i][j]=0;for(i=2;i<=n;i++)for(j=1;j<i;j++){scanf("%s",s);if(s[0]!='x')map[i][j]=map[j][i]=atoi(s);}spfa();}return 0;}
- poj1502 - MPI Maelstrom
- poj1502 MPI Maelstrom
- MPI Maelstrom poj1502
- POJ1502 MPI Maelstrom Dijkstra
- POJ1502 MPI Maelstrom
- POJ1502 MPI Maelstrom
- poj1502 MPI Maelstrom 最短路
- POJ1502——MPI Maelstrom
- poj1502 MPI Maelstrom 直接Dijkstra
- MPI Maelstrom - POJ1502最短路
- POJ1502 MPI Maelstrom 基本最短路
- poj1502 MPI Maelstrom 最短路径,dijkstra
- POJ1502 MPI Maelstrom -DIJKSTRA练习系列
- POJ1502 MPI Maelstrom(最短路dijkstra)
- poj1502 MPI Maelstrom(最短路中的最大值)
- poj1502 MPI Maelstrom(最短路)
- POJ1502 MPI Maelstrom(最短路径)
- poj1502-MPI Maelstrom三种方法
- 利用栈队列模拟递归函数调用(附快速排序代码)
- #ifdef,#else,#endif和#ifndef,#else,#endif 详解
- maven 配置
- 让你的Lable拥有qq表情!
- 用JQ 写的 广告图片轮播 幻灯片JS特效代码分享
- poj1502 - MPI Maelstrom
- 数据库备份/还原 后DedeCms系统配置参数出限空白解决方法
- Eclipse下Android SDK一个错误的解决方法
- maven 配置
- window.location.hash属性介绍
- WordPress 编辑器修改
- 小议动态规划
- python列表操作
- 并查集:Forming Teams(CF#133)