Prim 算法
来源:互联网 发布:sql 存储过程 教程 编辑:程序博客网 时间:2024/06/05 18:43
按照课件的思路整合的代码,哈哈
#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;#define MaxValue 32700const int NumEdges = 50; //边条数const int NumVertices = 10; //顶点个数typedef char VertexData; //顶点数据类型typedef int EdgeData; //边上权值类型typedef struct { //VertexData vexList[NumVertices]; //顶点表 EdgeData Edge[NumVertices][NumVertices]; //邻接矩阵, 可视为边之间的关系 int n, e; //图中当前的顶点个数与边数} MTGraph;typedef struct { int head,tail; int cost;} MST;MST T[100];void Prim ( MTGraph G, MST T[] ,int u ) { double lowcost[G.n]; int nearvex[G.n]; for ( int i = 0; i < G.n; i++ ) { lowcost[i] = G.Edge[u][i]; //Vu到各点代价 nearvex[i] = u; //及最短带权路径 } nearvex[u] = -1; //加到生成树顶点集合 int k = 0; //存放最小生成树结点的变量 for ( int i = 0; i < G.n; i++ ) { if ( i != u ) { //循环n-1次, 加入n-1条边 EdgeData min = MaxValue; int v = 0; for ( int j = 0; j < G.n; j++ ) { if ( nearvex[j] != -1 && // =-1不参选 lowcost[j] < min ) { v = j; min = lowcost[j]; } //求生成树外顶点到生成树内顶点具有最 //小权值的边, v是当前具最小权值的边 } if ( v ) { //v=0表示再也找不到要求顶点 T[k].tail = nearvex[v]; //选边加入生成树 T[k].head = v; T[k++].cost = lowcost[v]; nearvex[v] = -1; //该边加入生成树标记 for ( int j = 0; j < G.n; j++ ) if ( nearvex[j] != -1 && G.Edge[v][j] < lowcost[j] ) { lowcost[j] = G.Edge[v][j]; //修改 nearvex[j] = v; } } } //循环n-1次, 加入n-1条边 }}int main() { MTGraph G; int s,t,path; cout<<"请输入顶点个数"<<endl; cin>>G.n; cout<<"请输入边数"<<endl; cin>>G.e; for(int i=0; i<G.n; i++) { for(int j=0; j<G.n; j++) { if(i==j) G.Edge[i][j]=0; else G.Edge[i][j]=MaxValue; } } cout<<"请输入各边权值"<<endl; for(int i=1; i<=G.e; i++) { cin>>s>>t>>path; G.Edge[s][t]=G.Edge[t][s]=path; } Prim(G,T,0); cout<<endl; for(int i=0;i<G.n-1;i++){ cout<<T[i].head<<" "<<T[i].tail<<" "<<T[i].cost<<endl; } return 0;}/*0 1 281 2 162 3 123 4 224 5 255 0 104 6 243 6 181 6 14*/
阅读全文
0 0
- prim 算法
- Prim算法
- Prim算法
- prim算法
- Prim算法
- Prim算法。
- Prim 算法
- Prim算法
- prim算法
- Prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- 设计模式之禅9
- Oracle的锁表与解锁
- 循环障删(CyclicBarrier)
- text组件中没法打空格?
- 魔方阵
- Prim 算法
- phpcms v9访问单网页一级栏目自动跳转到其下的第一个子栏目?
- eclipse中设置自定义文档签名
- Android IPC之Binder源码分析
- 深度学习-目标检测
- 【nachos】山东大学操作系统课设实验nachos系统(4)用户程序与系统调用
- PHP多线程【处理文件】
- eclipse项目中文名称
- 汽车车身设计