首页 > 代码库 > dijkstra
dijkstra
#define maxSize 10//节点类型class VNode{public: int no; char info;};//图类型class MGraph{public: float edges[maxSize][maxSize];//float表示权值 int n,e; VNode vex[maxSize];};void dijkstra(MGraph g, int v, int dist[],int path[]){ int set[maxSize];//存放已经确定的节点 //初始化dist,path,set数组 for(int i = 0; i < g.n; ++i) { dist[i] = g.edges[v][i]; set[i] = 0; if(g.edges[v][i] < INT_MAX) { path[i] = v; }else { path[i] = -1; } } set[v] = 1;//把起始点加入set中 int min = INT_MAX; int min_index = -1;//每一次找dist最小的点加入 for(int j = 0; j < g.n; ++j) { //找到dist最小的点 for(int k = 0; k < g.n; ++k) { if(set[k] == 0 && dist[k] < min) { min = dist[k]; min_index = k; } } set[min_index] = 1;//把dist最小的点加入 //以dist最小的点作为中间点,去更新其他的dist与对应的path for(int k = 0; k < g.n; ++k) { if(set[k] == 0 && dist[min_index] + g.edges[min_index][k] < dist[k]) { dist[k] = dist[min_index] + g.edges[min_index][k]; path[k] = min_index; } } }}
dijkstra
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。