Dijkstra算法-最短路径-邻接矩阵表示
来源:互联网 发布:burpsuite mac破解版 编辑:程序博客网 时间:2024/05/16 07:01
图结构练习——最短路径
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。
Input
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
Example Input
3 21 2 11 3 11 0
Example Output
10
#include<stdio.h>#define MAXINT 65535#define N 10005int Pic[N][N];int PointValue[N];int Path[N];int Check[N];int front=0;int rear=0;void Init(int l){int row;int col;int v;for(int i=0;i<l;i++){scanf("%d %d %d",&row,&col,&v);if(Pic[row-1][col-1]>v){Pic[row-1][col-1]=v;Pic[col-1][row-1]=v;}}}void RollBack(int n){for(int i=0;i<n;i++){PointValue[i]=0;Path[i]=0;Check[i]=0;for(int j=0;j<n;j++){Pic[i][j]=MAXINT;}}front=0;rear=0;}int Mix(int a[],int n){int Mix=MAXINT;int k=0;for(int i=0;i<n;i++){if(!Check[i]&&Mix>a[i]){Mix=a[i];k=i;}}return k;}void ShortPath(int start,int end,int n){PointValue[0]=0;Path[rear++]=start;Check[start]=1;for(int i=1;i<n;i++){if(Pic[start][i]) PointValue[i]=Pic[start][i];else PointValue[i]=MAXINT;}int j=1;int Num=n-1;while(Num--){for(int k=0;k<n;k++){if(Pic[j][k]&&PointValue[j]+Pic[j][k]<PointValue[k]&&!Check[k]){PointValue[k]=PointValue[j]+Pic[j][k];}}int v=Mix(PointValue,n);Check[v]=1;Path[rear++]=v;j=v;}}int main(){int k,m;while(scanf("%d %d",&k,&m)!=EOF){RollBack(k);Init(m);ShortPath(0,k,k);printf("%d\n",PointValue[k-1]);//printf("\n");}return 0;}
提交了好几次都没过,之前没有考虑这是无向图,所拥有的边可能不只一条,即最先输入的边不一定是最小的,这需要再输入的时候加以确认。
最短路径Dijkstra算法
Check数组 检测该点是否被访问;
PointValue数组 动态保存由原点到该点的最短距离;
Pic邻接矩阵保存各个点之间的关系(权值);
通过一个一维数组保存又原点到该点的最短距离,并将此点设置为已访问,在从该点开始访问与之相连的各个节点,dk=Mix(dk,dj+(path:由j-k的路径长)/*Pic[j][k]*/)
循环遍历,直到所有的点全部访问完毕!
阅读全文
0 0
- Dijkstra算法-最短路径-邻接矩阵表示
- 最短路径(邻接矩阵)-Dijkstra算法
- 图的邻接矩阵表示与最短路径算法( Dijkstra )代码实现
- 最短路径算法之Dijkstra算法(邻接矩阵实现)
- Dijkstra 邻接矩阵 单源点最短路径
- DIJKSTRA最短路径算法
- 最短路径算法-dijkstra
- dijkstra最短路径算法
- 最短路径 Dijkstra算法
- 最短路径(Dijkstra算法)
- 最短路径Dijkstra算法
- 最短路径 Dijkstra算法
- Dijkstra最短路径算法
- 最短路径dijkstra算法
- 最短路径 dijkstra算法
- 最短路径Dijkstra 算法
- 最短路径 (Dijkstra算法)
- Dijkstra最短路径算法
- 【16-Redis的Sentinel】
- Deep Learning
- 5、原型模式(Prototype)
- Python解释器
- python调用shell的方法
- Dijkstra算法-最短路径-邻接矩阵表示
- 6、适配器模式(Adapter Method)
- 7、装饰模式(Decorator)
- 8、代理模式(Proxy)
- myeclipse web project如何导入jar包
- 【笔记】利用ajax返回Html代替iframe,实现局部更新
- 9、外观模式(Facade)
- AAC规格(LC,HE,HEv2)及性能对比
- 使用baidu的api完成汉译英功能