hdu4849(瞎扯+dijkstra求最短路径)
2014-09-03 21:51
106 查看
题目感觉很复杂,其实就是先模拟,然后求源点0到[1,n-1]的最短路径,这里就用dijkstra算法解就可以了。
代码如下:
代码如下:
#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<stack> #include<queue> #include<set> #include<map> #include<stdio.h> #include<stdlib.h> #include<math.h> #define N 1005 #define LL __int64 #define inf 0x7ffffff #define eps 1e-9 #define pi acos(-1.0) using namespace std; LL x[N*N],y[N*N],z[N*N]; LL c ; int n,m,xo,yo,x11,y11; void get_xyz_c() { x[0] = xo;x[1] = x11; y[0] = yo;y[1] = y11; z[0] = (x[0] * 90123 + y[0] )%8475871 + 1; z[1] = (x[1] * 90123 + y[1] )%8475871 + 1; int i,j; for(i = 2; i <= n*n; i++) { x[i] = (1LL*12345 + x[i-1] * 23456 + x[i-2] * 34567 + x[i-1] * x[i-2] * 45678)%5837501; y[i] = (1LL*56789 + y[i-1] * 67890 + y[i-2] * 78901 + y[i-1] * y[i-2] * 89012)%9860381; z[i] = (x[i] * 90123 + y[i] )%8475871 + 1; } for(i = 0; i < n; i++) for(j = 0; j < n; j++) if(i == j) c[i][j] = 0; else c[i][j] = z[i*n+j]; } int dist ; int vis ; void dijkstra() { memset(vis,0,sizeof(vis)); int i,j; for(i = 0; i < n; i++) dist[i] = c[0][i]; vis[0] = 1; for(i = 0; i < n-1; i++) { int temp = inf,k; for(j = 0; j < n; j++) if(!vis[j] && dist[j] < temp) { temp = dist[j]; k = j; } vis[k] = 1; for(j = 0; j < n; j++) if(!vis[j] && dist[j] > dist[k] + c[k][j]) dist[j] = dist[k] + c[k][j]; } } int cnt[1000005]; int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); while(scanf("%d%d%d%d%d%d",&n,&m,&xo,&x11,&yo,&y11) != EOF) { get_xyz_c(); dijkstra(); memset(cnt,0,sizeof(cnt)); int i; for(i = 1; i < n; i++) cnt[ dist[i]%m ]++; for(i = 0; i < m; i++) if(cnt[i]) break; printf("%d\n",i); } return 0; }
相关文章推荐
- 最短路径搜索算法中Dijkstra的原理
- 最短路径算法比较(Dijkstra、Bellman-Ford、SPFA)及实现(Java)
- 最短路径问题 最短路径 dijkstra
- Dijkstra单源最短路径,适合稠密图,顶点少,边多(c语言)
- 数据结构-图(三)-最短路径之Dijkstra
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- 最短路径之迪杰斯特拉算法(Dijkstra)
- HDU 3790 最短路径问题(dijkstra)
- Dijkstra最短路径算法(针对加权有向图)
- 最短路径之迪杰斯特拉(Dijkstra)算法
- 带权图最短路径 Dijkstra 算法和实现
- 图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )
- 【图】单源最短路径dijkstra
- Dijkstra找最短路径
- 最短路径 -- Floyd-Warshall & Dijkstra & spfa 学习和思考
- Dijkstra和floyd——求单源点最短路径
- Dijkstra――最短路径(邻接表法)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 高性能最短路径算法 Dijkstra
- 最短路径问题(Dijkstra解法)