算法导论 单源最短路径 Bellman-Ford
来源:互联网 发布:淘宝麦兜沙特代购真吗 编辑:程序博客网 时间:2024/06/01 21:42
#include <stdio.h>#include <stdlib.h>//图节点typedef struct VertexNode{char name;int key;VertexNode *p;}Vertex,*pVertex;//图typedef struct {int vn;int **E;pVertex *V;}Graph,*pGraph;//根据算法导论 图24-4 初始化图pGraph initGraph(){pGraph g=(pGraph)malloc(sizeof(Graph));g->vn=5;pVertex vs=(pVertex)malloc(sizeof(Vertex));vs->name='s';vs->key=0;vs->p=NULL;pVertex vt=(pVertex)malloc(sizeof(Vertex));vt->name='t';vt->key=INT_MAX;vt->p=NULL;pVertex vy=(pVertex)malloc(sizeof(Vertex));vy->name='y';vy->key=INT_MAX;vy->p=NULL;pVertex vx=(pVertex)malloc(sizeof(Vertex));vx->name='x';vx->key=INT_MAX;vx->p=NULL;pVertex vz=(pVertex)malloc(sizeof(Vertex));vz->name='z';vz->key=INT_MAX;vz->p=NULL;g->V=(pVertex*)malloc(g->vn*sizeof(pVertex));g->V[0]=vs;g->V[1]=vt;g->V[2]=vy;g->V[3]=vx;g->V[4]=vz;g->E = (int**)malloc(g->vn*sizeof(int*));for(int i=0;i<g->vn;i++){g->E[i]=(int*)malloc(g->vn*sizeof(int));}for(int i=0;i<g->vn;i++){for(int j=0;j<g->vn;j++){g->E[i][j]=INT_MAX;}}g->E[0][1]=6;g->E[0][2]=7;g->E[1][2]=8;g->E[1][3]=5;g->E[1][4]=-4;g->E[2][3]=-3;g->E[2][4]=9;g->E[3][1]=-2;g->E[4][3]=7;return g;}void relax(pGraph g,int u,int v){//无边,不进行松弛if(g->E[u][v]==INT_MAX)return;int sum,uk=g->V[u]->key,vk=g->V[v]->key,ew=g->E[u][v];//根据规则,加上无穷等于无穷if(uk==INT_MAX || ew==INT_MAX)sum=INT_MAX;elsesum=uk+ew;if(vk>sum){g->V[v]->key=sum;g->V[v]->p=g->V[u];}}bool BellmanFord(pGraph g){for(int i=1;i<=g->vn-1;i++){for(int j=0;j<g->vn;j++){for(int k=0;k<g->vn;k++){if(g->E[j][k]<INT_MAX)relax(g,j,k);}}}for(int u=0;u<g->vn;u++){for(int v=0;v<g->vn;v++){if(g->E[u][v]>0){int sum,uk=g->V[u]->key,vk=g->V[v]->key,ew=g->E[u][v];//根据规则,加上无穷等于无穷if(uk==INT_MAX || ew==INT_MAX)sum=INT_MAX;elsesum=uk+ew;if(vk>sum)return false;}}}return true;}void printKey(pGraph g){for(int i=0;i<g->vn;i++){pVertex v=g->V[i];printf("%c %d\n",v->name,v->key);}}void main(){pGraph g=initGraph();bool b=BellmanFord(g);if(b)printKey(g);elseprintf("No Path!");getchar();}
阅读全文
0 0
- 算法导论 ch24 单源最短路径 Bellman-Ford
- 算法导论 单源最短路径 Bellman-Ford
- [算法导论读书笔记]Bellman-Ford算法(单源最短路径)
- 【算法导论】单源最短路径之Bellman-Ford算法
- 单源最短路径Bellman-Ford算法
- 单源最短路径 : Bellman-Ford 算法
- 单源最短路径-Bellman-Ford算法
- 单源最短路径--Bellman-Ford算法
- 单源最短路径-Bellman-Ford算法
- 单源最短路径-Bellman-ford算法
- Bellman-Ford 单源最短路径算法
- 算法导论-最短路径-Dijkstra算法+Bellman-Ford 算法
- 单源最短路径算法之Bellman-Ford算法
- 算法导论-第24章- 单源最短路径 - 24.1 Bellman-Ford 算法
- Bellman-Ford算法 单源最短路径(o(nm))
- Bellman-Ford 算法实现单源最短路径
- Bellman-Ford算法:计算单源最短路径
- Bellman-Ford 算法 单源最短路径问题
- -f标志(Makefile)
- hud 6078 Wavel Sequence
- Python学习(字典和结构化数据)
- opengl光照之镜面光逐顶点渲染与逐像素渲染
- 开源透明状态栏和导航栏的终极解决方案
- 算法导论 单源最短路径 Bellman-Ford
- 桥接模式
- POJ3686 The Windy's【网络流】
- 在Eclipse、myeclipse中引入外部的maven
- find_by 方法
- 机器学习(一) 线性回归
- TensorFlow 核心流程剖析 -- 2 神经网络模型的构建、分割和优化
- OpenCV自学笔记23. Raspberry Pi 安装OpenCV(C++)
- python之sys模块详解