最小生成树和最短路径
来源:互联网 发布:js 滚动条居中 编辑:程序博客网 时间:2024/05/11 23:19
带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法;有向图的最短路径算法有dijkstra算法和floyd算法。
int prime(int s)//s为起点 { int index; int sum = 0; memset(vis, false, sizeof(vis)); vis[s] = true; for(int i=1;i<=m; i++)//以s为起点,将该点连接的所有边权给dist数组 dist[i] = graph[s][i]; for(int i = 1; i < m; i ++)//操作m-1次将剩余的点加入 { int mincost = INF; for(int j=1;j<=m;j++)//找出最小的边 { if(!vis[j]&&dist[j]<mincost){ mincost = dist[j]; index = j; } } vis[index] = true;//访问该边的端点 sum += mincost;//累加权值 for(int j=1;j<=m;j++){ if(!vis[j] && dist[j] > graph[index][j])//更新所有能连的最小权值 dist[j] = graph[index][j]; } } return sum;}
void dijkstra(int s)//s是起点{int index; memset(vis,false,sizeof(vis)); vis[s] = true; for(int i=1;i<=n;i++)//从s到其他所有点的最短路 dist[i] = graph[s][i]; for(int i=1;i<n;i++){ int mincost = INF; for(int j=1;j<=n;j++){ if(!visit[j] && dist[j] < mincost){ mincost = dist[j]; index = j; } } visit[index]=true; sum+=mincost; for(int j=1;j<=n;j++){ if(!visit[j] && dist[j] > dist[index] + graph[index][j])//当加入一个点时,该点与s点可能有共同的顶点,所以需要更新 dist[j] = dist[index] + graph[index][j]; } }}
void floyd(){ for(int k =1;k<=n;k++)//作为循环中间点的k必须放在最外一层循环 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(dist[i][j] > dist[i][k] + dist[k][j]) dist[i][j] = dist[i][k] + dist[k][j];//dist[i][j]得出的是i到j的最短路径 }}
int kruskal(int n) //n为边的数量 { int sum=0; make_set();//并查集初始化 for(int i=0; i <n;i++)//先排序,从权最小的边开始加进图中 { if(find_set(edge[i].start)!= find_set(edge[i].end))//若最终父亲不同,则合并两棵树直到变成一颗 { Union(edge[i].start, edge[i].end); sum+=edge[i].val; } } return sum;}
0 0
- 最小生成树和最短路径
- 最小生成树和最短路径
- 最小生成树和最短路径
- 最小生成树和最短路径
- 最小生成树和最短路径
- 图的周游,最短路径和最小生成树
- 求最小生成树和最短路径的总结
- 最短路径和最小生成树算法
- 最小生成树和最短路径的对比
- 转载:图的最小生成树和最短路径
- 最小生成树,最短路径
- 最小生成树,最短路径算法
- 最小生成树&&最短路径
- 最小生成树&最短路径
- POJ1797 Heavy Transportation (最短路径/最小生成树kruskal)
- 最小生成树,最短路径的基本算法
- 图的最小生成树与最短路径
- 最小生成树 并查集 最短路径
- 编程之美--求数组的子数组之和的最大值
- LeetCode:Insert Interval
- graphics pipeline
- Java 使用 Socket 池 读写 示例
- String字符串的替换 生成新的字符串
- 最小生成树和最短路径
- 类初始化列表
- Windows下安装Redmine
- 对混合数值,字符,null的字段进行排序
- VC从数据库取出日期格式数据时,总是自动添加"上午下午"字符串
- C++函数声明与定义
- header("location:test.php")跳转成功需要注意的
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第十九课
- git初学时需要了解的知识