[备战NOI同步赛]最短路模板
2014-07-01 20:27
253 查看
最短路,没什么好说的,据说静态邻接表跑得快,就用它了,看代码
/* 最短路模板 By:qpswwww(ZYK) 包含:Floyd(),SPFA(),静态邻接表建图 */ #include <stdio.h> #include <string.h> #define INF 0x3f #define MAXN 1000 #define MAXM 10000 struct Line { int from,to,w,next; //起点,终点,权值,以该边起点为起点的下一条边在邻接表中对应编号 }edges[MAXN]; //静态邻接表,SPFA用 int head[MAXM],n=1; //head[i]=以i为起点的第一条边在edges数组中的位置,n= int Floyd(int map[],int n,int start,int end) //Floyd-Warshall算法,代入存储图的数组map及点的个数n,起点start,终点end { int i,j,k,f[MAXN][MAXN]; //f[i][j]=从i到j的最短路 memcpy(f,map,sizeof(map)); //这里复制了一遍map数组,可以不用复制,自己使用时斟酌 memset(f,INF,sizeof(f)); for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(f[i][k]<INF&&f[k][j]<INF) if(f[i][k]+f[k][j]<f[i][j]) f[i][j]=f[i][k]+f[k][j]; return f[start][end]; } int SPFA(Line *start) //SPFA求最短路,配合makePic()使用 { int i,j,now,h=0,t=1; int q[MAXN],dis[MAXN],visit[MAXN]; //dis[i]=起点到i的距离 memset(q,0,sizeof(q)); memset(visit,0,sizeof(visit)); memset(dis,INF,sizeof(dis)); q[h]=1; while(h<t) { now=q[h]; visit[now]=0; for(i=head[now];i!=-1;i=edges[i].next) { int e=edges[i].to; //e是边i的终点 if(dis[e]>edges[i].w+dis[now]) { dis[e]=edges[i].w+dis[now]; //更新起点到e的距离 if(!visit[e]) //e没访问过,就入队 { visit[e]=1; q[t++]=e; } } } } return dis ; } void makePic(int u,int v,int w) //SPFA用,建立u->v,边权为w的有向边,输入边前一定要注意把head数组全部置为-1,非常重要,否则SPFA会死循环!!!! { edges .from=u; edges .to=v; edges .w=w; edges .next=head[u]; //记录上一条边的编号 head[u]=n++; //更新第一条(最后一条)边的编号 }
相关文章推荐
- [备战NOI同步赛]Kruskal最小生成树模板
- [备战NOI同步赛]适合ACM-ICPC的并查集模板
- [备战NOI同步赛]快速幂模板(二分/位运算)
- [备战NOI同步赛]适合ACM-ICPC使用的进制转换模板
- [备战NOI同步赛]适合ACM-ICPC的高精度运算结构体Hugeint的实现
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
- Dijkstra算法模板---单源最短路---邻接矩阵模板+题目
- POJ3259 Wormholes(最短路,有无负环,spfa,模板)
- poj1511/zoj2008 Invitation Cards(最短路模板题)
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
- noi2015模板-后缀自动机
- 控制UpdataPanel中的GridView模板列控件同步刷新
- K短路及其模板(A*+Dijkstra)
- 最短路模板
- JZOJ3777. 【NOI2015模拟8.17】最短路(shortest)
- POJ 2502 Subway 单源点最短路模板
- HDU 2544 最短路(我的dijkstra算法模板、SPAFA算法模板)
- [BZOJ2007] [NOI2010] 海拔|网络流80‘|最短路100’
- 洛谷1339 热浪(最短路模板)
- 【数据结构】有向图、无向图以及最短路(Dijkstra, Floyd)算法的C#实现(纯模板Template实现)