c/c++ Dijkstra算法实现
来源:互联网 发布:魔笛 知乎 编辑:程序博客网 时间:2024/05/17 07:23
#include<stdlib.h>#include<stdio.h>#include <iostream>#include<stack>#include<string.h>#define M 100#define N 100//结构体一个图typedef struct node{ int matrix[N][M]; //邻接矩阵 int n; //顶点数 int e; //边数}MGraph;//dist[i]记录v0到i的最短距离,path[i]记录最短路上v0到i的前一个顶点,v0是源顶点void Dijkstra(MGraph g,int *dist,int *path,int v0){ int i,j,k; //动态开辟bool型de visited,来标记顶点 bool *visited=(bool*)malloc(sizeof(bool)*g.n); //将dist和path初始化 for(i=0;i<g.n;i++) { //如果v0与i直接相连 if(i!=v0&&g.matrix[v0][i]>0) { dist[i]=g.matrix[v0][i]; path[i]=v0; } //如果不直接相邻,权值设为无穷大 else { dist[i]=INT_MAX; path[i]=-1; } //初始化标记 visited[i]=false; } path[v0]=v0; dist[v0]=0; visited[v0]=true; //开始循环更新 for(i=1;i<g.n;i++) { int min=INT_MAX; int u; //找未被标记的权值最小的点 for(j=0;j<g.n;j++) { if(visited[j]==false&&dist[j]<min) { min=dist[j]; u=j; } } visited[u]=true; printf("%d\n",u); //更新dist的值和最短路径 for(k=0;k<g.n;k++) { if(visited[k]==false&&g.matrix[u][k]>0&&min+g.matrix[u][k]<dist[k]) { dist[k]=min+g.matrix[u][k]; path[k]=u; } } }}int main(){ //顶点数和边数,还有描述关系的语句个数m int n,e,m; MGraph g; //表示存在一条边s->t,权值为w int s,t,w; //源顶点v0 int v0; scanf("%d %d %d",&n,&e,&m); //初始化二维数组为0 memset(g.matrix,0,sizeof(g.matrix)); g.n=n; g.e=e; //将二维数组填好 for(int i=0;i<m;i++) { scanf("%d %d %d",&s,&t,&w); g.matrix[s][t]=w; g.matrix[t][s]=g.matrix[s][t]; } g.n=n; g.e=e; //输入源顶点 scanf("%d",&v0); int *dist=(int *)malloc(sizeof(int)*n); int *path=(int *)malloc(sizeof(int)*n); Dijkstra(g,dist,path,v0); return 0;}
阅读全文
0 0
- C++Dijkstra算法实现
- Dijkstra算法 c语言实现
- Dijkstra算法 c/c++实现
- dijkstra算法C语言实现
- c/c++ Dijkstra算法实现
- 数据结构:Dijkstra算法实现 c实现
- dijkstra最短路径算法C实现
- Dijkstra(迪杰斯特拉)算法分析与实现(C++)
- Dijkstra 算法的 C/C++ 实现
- Dijkstra 算法 c语言原生实现
- Dijkstra算法的简单实现(C++)
- dijkstra算法 c语言
- Dijkstra算法函数(c++)
- Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 【C++】【啊哈!算法】Dijkstra算法
- 配合Dijkstra算法的Hash表实现文件C语言
- 配合Dijkstra算法的二叉堆实现文件C语言
- Dijkstra 算法+Heap堆的完整c实现源码
- 16、Oracle中的日期类型
- 当前深度神经网络模型压缩和加速方法速览
- 假如时光倒流,我会这么学习Java
- 冰点文库、百度文库文档免费下载软件
- 聊聊epoll的水平触发和边缘触发
- c/c++ Dijkstra算法实现
- “他们开的薪水太高了,他直接放弃了一切”
- poj2251 Dungeon Master(三维bfs)
- 《白话深度学习与Tensorflow》学习笔记(1)深度学习框架、CNN、VC维
- Mvp简单使用
- android视频处理一:获取手机视频
- Oracle学习及常见问题的解决-day02
- 支持缩小放大
- (二)java设计模式之策略模式