c++版本的prim算法最小生成树
来源:互联网 发布:时标网络图 软件 编辑:程序博客网 时间:2024/06/11 18:34
#include<iostream>#include<string.h>#include<string>#include<malloc.h>#include<iomanip>typedef char ver[4];typedef int vr;#define INF 10000#define max 50using namespace std;typedef struct//{vr adj;}arcnode,adjmat[max][max];typedef struct{ver vex[max]; //存顶点数的数组adjmat arc; //邻接矩阵int vexnum,arcnum;}mgraph;typedef struct{ver adjvex;vr lowcost;}closeedge[max];int locate(mgraph n,ver v){int i;for(i=0;i<n.vexnum;i++)if(strcmp(n.vex[i],v)==0)return i;return -1;}void creategraph(mgraph *n) //用邻接矩阵的方法创建矩阵{int i,j,k,w,len;char s[max];ver v1,v2; //顶点cout<<"请输入无向图的n的顶点数 弧数:"<<endl;cin>>(*n).vexnum>>(*n).arcnum;cout<<"请输入n个顶点的值:"<<endl;for(i=0;i<n->vexnum;i++)cin>>n->vex[i];for(i=0;i<n->vexnum;i++)for(j=0;j<n->vexnum;j++)n->arc[i][j].adj=INF; //邻接表初始化为大值cout<<"请输入n条弧的弧尾 弧头 权值:"<<endl;for(k=0;k<n->arcnum;k++){cin>>v1>>v2>>w; //输入两个顶点 以及顶点之间的距离i=locate(*n,v1);j=locate(*n,v2);n->arc[i][j].adj=n->arc[i][j].adj=w;}}/*int mininum(mgraph g) //返回当前表中的最小lowcost的值的序号{closeedge edge;int i=0,j,k,min;while(!edge[i].lowcost)i++;min=edge[i].lowcost;k=i;for(j=i+1;j<g.vexnum;j++)if(edge[j].lowcost>0&&edge[j].lowcost<min){k=j;min=edge[j].lowcost;}return k;}*/void prim(mgraph g,ver u){int i,j,k;closeedge closedge;k=locate(g,u); //找到该点对应的下标for(j=0;j<g.vexnum;j++){strcpy(closedge[j].adjvex,u);//将表的顶点域更新为当前序号的值closedge[j].lowcost=g.arc[k][j].adj; //将该点到邻接表的每一个的距离都更新到这个表上}closedge[k].lowcost=0; //该点到该点的距离为0cout<<"无向图的最小生成树的各条边分别是:"<<endl;for(i=1;i<g.vexnum;i++){//k=mininum(g); //找到当前表中的最小lowcost 距离int X=0,Z,min;while(!closedge[X].lowcost)X++;min=closedge[X].lowcost;k=X;for(Z=X+1;Z<g.vexnum;Z++)if(closedge[Z].lowcost>0&&closedge[Z].lowcost<min){k=Z;min=closedge[Z].lowcost;}cout<<closedge[k].adjvex<<"->"<<g.vex[k]<<endl;closedge[k].lowcost=0;//该顶点放入集合中for(j=0;j<g.vexnum;j++)if(g.arc[k][j].adj<closedge[j].lowcost){strcpy(closedge[j].adjvex,g.vex[k]);//顶点域的跟新closedge[j].lowcost=g.arc[k][j].adj;//最小距离的更新}}}void displaygraph(mgraph n)//用邻接矩阵储存表示的图{int i,j;cout<<"无向网一共有n个顶点n条弧,顶点依次是:"<<endl;for(i=0;i<n.vexnum;i++)cout<<setw(8)<<n.vex[i];cout<<endl<<"序号i=";for(i=0;i<n.vexnum;i++)cout<<setw(8)<<i;cout<<endl;for(i=0;i<n.vexnum;i++){cout<<setw(8)<<i;for(j=0;j<n.vexnum;j++)cout<<setw(8)<<n.arc[i][j].adj;cout<<endl;}}int main(){mgraph n;cout<<"创建一个无向网:"<<endl;creategraph(&n);displaygraph(n);char a[4]="A";prim(n,a);}/*A B 6A D 7A E 12E B 9E D 5B C 8E C 4C D 6*/
阅读全文
0 0
- c++版本的prim算法最小生成树
- 最小生成树Prim算法C语言
- Prim最小生成树算法(C++)
- 最小生成树--prim算法的c语言描述
- 图的最小生成树Prim算法朴素版(C++)
- Prim算法求图的最小生成树--C代码
- C语言实现图的Prim最小生成树算法
- Prim 算法生成的最小生成树
- 最小生成树的prim算法代码
- 最小生成树的prim算法实现
- 构造最小生成树的 prim 算法
- 最小生成树的Prim算法
- 图的最小生成树(prim算法)
- 最小生成树的prim算法
- 最小生成树的prim算法
- JAVA的最小生成树(prim)算法
- 最小生成树的prim算法实现
- 最小生成树的prim算法
- Android TextView图文混排,图片和文字居中对齐
- 小学生自学奥数必备的这些书籍
- JS 和OC的数据传递
- GANs实现(Generative Adversarial Networks)
- hdu 2177 取(2堆)石子游戏
- c++版本的prim算法最小生成树
- ios app url scheme跳转到淘宝商品详情页 唤醒app
- JDeveloper环境配置WebLogic常见的问题
- tcpdump
- 全栈工程师将会缔造下一个高薪群体
- Akka(18): Stream:组合数据流,组件-Graph components
- Java--a++与 ++a 与 a=a+1 与a+=1
- HDU 6129 Just do it (组合数)
- 线性分类器-Tumer Prediction