无向图的生成两种遍历方法以及最小生成树的构建c++代码实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无向图的遍历及其算法

#include

#include

#define max 50

int n,e;

int visited1[max]; //访问标记

int visited2[max];

int visited3[max];

double quan[max][max]; //存取权值

int visited4[max];

double zh=0.0; //权值之和

struct link //结点定义

{ int data;

double cost;

link *next;

};

struct syz //存取路径的两个端点及其权值

{ int h;

int l;

double z;

}syz[max];

struct Adjlist //存取顶点

{ int v;

link *next;

}Adjlist[max];

void c_cbs_graph (int n, int e ) //创建无向图

{ int i,j,k ;

double c;

link *s ;

for (i=1; i<=n; i++)

{ /*建立邻接表头结点*/

Adjlist[i].v=i ; Adjlist[i].next=NULL;

}

cout<

for (k=1; k<=e;k++)

{ cout<<"请输入第"<

cin>>i>>j>>c;

cout<

s=new link; /*申请一个动态存储单元*/

s->data=j ;

s->cost=c;

s->next=Adjlist[i].next ;

Adjlist[i].next=s ;

s=new link;

s->data=i ;

s->cost=c;

s->next=Adjlist [j].next ;

Adjlist[j].next=s ;

}

};

void DFS( int i ) //深度优先遍历

{

// i是遍历起始点的在邻接表中的下标值,其下标从1开始

link *p;

cout<';

visited1[i]=1;

p = Adjlist[i].next;

while(p!=NULL)

{

if (visited1[p->data]==0)

DFS (p->data);

p=p->next;

}

};

void BFS(int i) //广度优先遍历

{

int q[max]; /*定义队列*/

int fro,rea; link *p ; /*P为搜索指针*/

fro=rea=0 ;

cout<';

visited2[i]=1 ; rea++; q[rea]=i ; /*进队*/

while (fro

{

fro++ ; i=q[fro] ;

p=Adjlist[i].next;

while (p!=NULL)

{

if (visited2[p->data]==0)

{

cout<data].v<<'>';

visited2[p->data]=1 ;

rea++;

q[rea]=p->data ;

}

p=p->next;

}

}

};

void R() //存入权值

{ int i,j;

link *r;

for(i=0;i

for(j=0;j

quan[i][j]=0;

for(i=0;i

{ r=Adjlist[i+1].next;

while(r!=NULL)

{ quan[i][(r->data)-1]=r->cost;

quan[(r->data)-1][i]=r->cost;

r=r->next;

}

}

};

void Min(int c) //查找权值最小的路径

{ int i;

syz[max].h=syz[0].h; syz[max].l=syz[0].l; syz[max].z=syz[0].z;

for(i=0;i

{ if(syz[max].z>syz[i].z)

{syz[max].h=syz[i].h; syz[max].l=syz[i].l; syz[max].z=syz[i].z; } }

};

void Prim(int v) //算法一,求最小生成树

{ int i,cout=1;

for(i=max;i>=max-n;i--)

{ Adjlist[i].v=0; Adjlist[i].next=NULL;}

Adjlist[max].v=v;

相关文档
最新文档