最短路径
Ac-try
这个作者很懒,什么都没留下…
展开
-
POJ -- 1125 Stockbroker Grapevine(Floyd)
题目大意:Stockbrokers要散布一个股票的谣言,谣言只能在相互认识的人中传递,给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间。求出以哪个人作为散布谣言的起点,能使得所有人都受到谣言的时间最短,并求出最后一个人得到消息的时间,如果给定的网络不完全,则输出“disjoint”。思路分析:没有固定的源点终点,用floyd可以求任意两个点的最短路径;而求最后一个人得到消原创 2015-02-28 18:13:51 · 386 阅读 · 0 评论 -
UESTC 915 -- 方老师的分身 II (spfa,dijkstra)
题目大意:求从一个点到另一个点至少经过k条路径的最短路径长度;思路分析:用两个变量u和e来维护一个点的dis,u表示当前点的编号,e表示经过多少条边,dis[u][e] 表示走到u点经过e条边的最短路径长度,因为是至少是k条边,所以大于k条边的当做是k条边来处理就好了。代码实现:SPFA:#include#include#include#define Min(a,b) ((a原创 2015-04-14 19:52:46 · 334 阅读 · 0 评论 -
UESTC 149 -- 解救小Q (bfs)
题目大意:.表示安全的位置#表示陷阱,Q表示小Q的位置L表示love8909所在位置,小写字母a-z表示分别表示不同的传送阵,数据保证传送阵两两配对。思路分析:注意传送带就是把两个点黏在一起,并把当前的传送带的位置标记为1。代码实现:#include#include#include#includeusing namespace std;int n,m,Qx,Q原创 2015-04-07 18:59:24 · 319 阅读 · 0 评论 -
POJ -- 3159 Candies
代码实现:#include#include#includeusing namespace std;const int maxn=1e9;int n,m,top,dis[30010],visit[30010];struct Edge{ int num,val; Edge *next; Edge(int n=0,int v=0,Edge *p=0):num(n)原创 2015-02-28 20:43:02 · 318 阅读 · 0 评论 -
POJ -- 3660 Cow Contest
代码实现:#include#include#define max(a,b) (a>b?a:b)int n,m,w[110][110],d[110];int main(){ while(~scanf("%d%d",&n,&m)){ int a,b; memset(w,0,sizeof(w)); memset(d,0,sizeof(d原创 2015-02-28 20:41:49 · 306 阅读 · 0 评论 -
POJ -- 3615 Cow Hurdles
代码实现:#include#include#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))const int maxn=1e9;int w[310][310],n,m,t;void Floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i原创 2015-02-28 20:39:36 · 325 阅读 · 0 评论 -
POJ -- 3037 Skiing
代码实现:Dijkstra:#include#include#include#includeusing namespace std;const int maxn=10010;int r,c,top,visit[maxn];double v,dis_t[maxn],w[maxn][maxn];struct Edge{ int num; double time;原创 2015-02-28 20:37:35 · 345 阅读 · 0 评论 -
POJ -- 2387 Til the Cows Come Home
代码实现:SPFA:#include#include#includeusing namespace std;int dis[1010],visit[1010],cnt[1010],top,n,t;struct Edge{ int num,val; Edge *next; Edge(int n=0,int v=0,Edge *p=0):num(n),原创 2015-02-28 20:34:47 · 278 阅读 · 0 评论 -
POJ -- 1511 Invitation Cards
代码实现:Dijkstra:#include#include#includeusing namespace std;const int maxn=1e13;const int maxn1=1000010;int n,p,q,top,visit[maxn1],tmp[maxn1][3];long long sum,dis[maxn1];struct Edge{ int原创 2015-02-28 20:32:22 · 274 阅读 · 0 评论 -
POJ -- 2253 Frogger
代码实现:#include#include#include#define min(a,b) (a<b?a:b)#define max(a,b) (a>b?a:b)int n;double w[210][210],c[210][2];void Floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){原创 2015-02-28 20:28:35 · 277 阅读 · 0 评论 -
POJ -- 1860 Currency Exchange()
代码实现:SPFA(邻接矩阵):#include#include#includeusing namespace std;double rate[110][110],curr[110][110],dis[110],t;int n,m,s,visit[110];int Spfa(int ss){ queueq; memset(dis,0,sizeof(dis));原创 2015-02-28 20:24:46 · 287 阅读 · 0 评论 -
HDU -- 1869 六度分离 (Floyd)
代码实现:#include#include#define min(a,b) (a<b?a:b)int w[110][110],n,m;void Floyd(){ for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++) w[i][j]=原创 2015-02-28 20:17:34 · 369 阅读 · 0 评论 -
HDU -- 3665 Seaside (Floyd)
代码实现:#include#define min(a,b) (a<b?a:b)int w[15][15],p[15],n;void Floyd(){ for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++) w[i][j]=min(w[i原创 2015-02-28 20:14:37 · 325 阅读 · 0 评论 -
HDU -- 2544 最短路 (Floyd)
题目大意:给出n个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,给出m条道路,给出每条道路连接的两个路口并给出工作人员走这条路所需的时间,找一条路径使得工作人员从商店到比赛场地的时间最少,求出最少的时间。思路分析:Floyd 代码实现:#include#include#define min(a,b) (a<b?a:b)int w[110][110],n,m;vo原创 2015-02-28 18:31:22 · 355 阅读 · 0 评论 -
HDU -- 3790 最短路径问题 (Dijkstra+priority_queue)
题目大意:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。思路分析:这是我做的第一道最短路径的题,但是还比较顺利,这道题没有涉及环路,所以设立一个dis[]数组,表示源点到各个点的距离,把源点s加入队列,则dis[s]=0,然后不断找出距离原点最近的点,利用这条边去更新扩展最短路径。因为这道题的原创 2015-02-28 16:21:23 · 550 阅读 · 0 评论 -
UESTC 914 -- 方老师分身 I(Dijkstra)
题目大意:给出分身的点,求到各个点的往返路径。思路分析:正序用Dijkstra求一遍到各个点的最短路径(这是去的路径),再反向建图,用Dijkstra求一遍到各个点的最短路径(返回路径);代码实现:#include#include#includeusing namespace std;int top,n,m,x,dis[3][1010],visit[1010],pos[1000原创 2015-04-07 19:06:21 · 456 阅读 · 0 评论