[数据结构] 邻接矩阵实现Dijkstra算法
来源:互联网 发布:淘宝摄影师兼职招聘 编辑:程序博客网 时间:2024/04/29 15:01
#include <iostream>using namespace std; #define MAX_V 100 //定义最大顶点个数#define INF 1000 //表示正无穷 typedef struct VertexType{ int number;//顶点标号 //int weight;};//顶点类型typedef struct MGraph//图的定义{ int matrix[MAX_V][MAX_V];//邻接矩阵 int weight[MAX_V][MAX_V];//存放权值 int v;//顶点数int e;//边数 VertexType vertax[MAX_V];//存放顶点信息};//图的邻接矩阵类型void CreateMGragh(MGraph *G){int i,j,m,weight;cout << "请输入顶点数和边数:" << endl;cin >> G->v >> G->e ;cout << "请输入顶点信息:" << endl;for (i=0;i<G->v;i++) scanf("%d",&G->vertax[i].number);//输入顶点信息,建立顶点表for (i=0;i<G->v;i++)//初始化邻接矩阵 for (j=0;j<G->v;j++) { G->matrix[i][j]=0; G->weight[i][j]=INF;//让所有权值不存在 } for(i=0;i<G->v;i++)//是结点自身指向自身权值为0 for(j=0;j<G->v;j++) if(i==j) G->weight[i][j]=0;cout << "输入每条有向边的首尾顶点序号及权值:" << endl;for (m=0;m<G->e;m++){cin >> i >> j >> weight;G->matrix[i][j]=1;G->weight[i][j]=weight;}}void DisplayMGragh(MGraph *G)//输出邻接矩阵G{ int i,j; for(i=0;i<G->v;i++) { for(j=0;j<G->v;j++) printf("%5d",G->matrix[i][j]); printf("\n"); }}void DisplayMGragh_W(MGraph *G)//输出权值矩阵G{ int i,j; for(i=0;i<G->v;i++) { for(j=0;j<G->v;j++) printf("%5d",G->weight[i][j]); printf("\n"); }}int MIN(int m,int n){if(m<=n)return m;elsereturn n;}void Dijkstra(MGraph *G)//对给定的有向图,求从源点1到其余每个顶点的最短路经长度 {int i,j,k;int choose,counter;int S[MAX_V];//存储顶点点集int P[MAX_V];//储存路径 memset(S,0,MAX_V);for(i=0;i<G->v;i++) // P[i]=0;int D[MAX_V];//储存从源点到其余各顶点的最短路径距离 S[0]=1;//初始化第一个结点D[0]=0;//源点到源点距离为0 for(i=1;i<G->v;i++) //初始化D D[i]=G->weight[0][i]; D[G->v]=INF; cout << "初始化单源最短路径" <<endl; for(i=0;i<G->v;i++) // printf("%5d\n",D[i]); printf("\n"); for(i=1;i<=G->v-1;i++){choose = D[G->v];for(j=1;j<G->v;j++)//寻找最短路径V-S {if((S[j]!=1)&&(choose>D[j])){ choose = D[j]; counter = j;}}S[counter]=1;//将顶点j加入S中 for (j=1;j<G->v;j++){if(S[j]!=1){if(D[counter]+G->weight[counter][j]<D[j]) P[j]=counter;D[j]=MIN(D[j],D[counter]+G->weight[counter][j]);}}} cout << "各顶点的单源最短路径" <<endl;for(k=1;k<G->v;k++) // printf("%5d\n",D[k]); cout <<endl; cout << "回退矩阵"<<endl; for(k=0;k<G->v;k++) // printf("%5d\n",P[k]); cout << "输入最短路径点:"<< endl;cin >> i ;printf("%d ",i);while(P[i]!=0) {printf("%d ",P[i]);i = P[i];}printf("0");}int main(){struct MGraph *G;G = new MGraph;CreateMGragh(G);cout << "显示邻接矩阵" <<endl; DisplayMGragh(G);cout << "显示权值矩阵" <<endl; DisplayMGragh_W(G);Dijkstra(G);delete G;return 0;}
0 0
- [数据结构] 邻接矩阵实现Dijkstra算法
- Dijkstra算法之邻接矩阵实现
- 数据结构——邻接矩阵表示的图的Dijkstra算法
- 【数据结构】Dijkstra求最短路径的图的邻接矩阵的实现
- 最短路径算法之Dijkstra算法(邻接矩阵实现)
- Dijkstra算法实现类—邻接矩阵,一般实现
- 《数据结构实战》------------------------------------实现Dijkstra算法
- 图的邻接矩阵实现(包括PRIM和DIJKSTRA算法)
- Dijkstra算法1:邻接矩阵表示
- 数据结构:Dijkstra算法实现 c实现
- 数据结构.图.无向带权&邻接矩阵.最短路径Dijkstra算法
- 数据结构之有向网邻接矩阵Dijkstra实现源点至其余各顶点最短路径
- 数据结构经典算法汇总___图的邻接矩阵实现
- 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
- 最短路径(邻接矩阵)-Dijkstra算法
- Dijkstra算法-最短路径-邻接矩阵表示
- 最短路径(二)—Dijkstra算法(通过边实现松弛:邻接矩阵)
- 邻接矩阵的dijkstra算法 迭代法以及使用PriorityQueue的java实现
- makefile的编译标志CFLAGS,LDFLAGS,LIBS区别
- VA软屏和IPS硬屏的区别
- 电梯调度算法——编程之美
- UICollectionViewLayout的部分属性
- ant入门指南(6)
- [数据结构] 邻接矩阵实现Dijkstra算法
- 照片采集
- linux下基于socket的聊天软件
- Hibernate初体验
- IndentationError: unindent does not match any outer indentation level的问题
- Android PendingIntent.getBroadcast intent数据不更新问题
- 解决“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问
- 创建ftp服务器
- [通用源] 史上最全抓源工具大合集(新手、高手必看)