徐州工程学院数据结构最小生成树实验文档

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

实验九图的最小生成树算法的实现

实验预备知识:

1.理解图最小生成树的意义和相应算法。

2.掌握带权图的存储结构。

一、实验目的

1.使学生熟悉最小生成树的算法实现。

2.掌握带权图的存储结构和处理方法。

二、实验环境

⒈硬件:每个学生需配备计算机一台。操作系统:DOS或Windows;

⒉软件:DOS或Windows操作系统+Turbo C;

三、实验要求

1.能够独立完成带权图的存储和最小生成树的生成

四、实验内容

1.在自己的U盘的“姓名+学号”文件夹中创建“实验9”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。

2.现在某电信公司要对如下图的几个城市之间进行光纤连接布线,请用合适的存储结构将下图存储到计算机中方便进行处理。

3.现在公司想以最小的代价将所有城市连通,方便所有城市间通信,请用普里姆算法和克鲁斯卡尔算法实现本图的最小生成树

#include

#include

#define INF 50

typedef struct ArcNode{

int adjvex; //该弧所指向的顶点位置struct ArcNode *nextarc; //下一个临接点

int weight; //弧的权重

}ArcNode; //表结点

typedef struct VNode{

char data; //顶点信息

ArcNode *firstarc; //指向下一个结点

}VNode,AdjList[6];

typedef struct{

AdjList LH; //创建头结点数组

int vexnum; //图的点的个数

int arcnum; //图的边的个数

}Graph;

typedef struct{

char nextvex;

int lowcost;

int know;

}Auxiliary_array; //辅助数组结构体

void main (void){

void buildtu (Graph*);

void printgraph(Graph*);

void prim( Graph *G, char u);

char u;

Graph UDG;

Graph *G = &UDG;

buildtu(G);

printgraph(G); //打印图

printf("请输入起始顶点:\n");

while(getchar()!='\n');

u = getchar();

prim(G ,u);

}

void buildtu (Graph *G) { //建图

int search(Graph *G,char a);

int i,n1,n2,w;

char a,b;

ArcNode *p, *q;

printf("请输入顶点个数和边的条数:\n");

scanf("%d %d",&G->vexnum,&G->arcnum);

printf("请输入顶点信息\n");

for (i = 0; i < G->vexnum; ++i){

while (getchar()!='\n');

scanf("%c",&G->LH[i].data);

G->LH[i].firstarc = NULL;

}

printf("请输入有关系的结点和该边的权重:\n");

for(i=0;iarcnum;++i){

while (getchar()!='\n');

scanf("%c %c %d",&a,&b,&w);

n1=search(G,a);

n2=search(G,b);

p=G->LH[n1].firstarc;

if(p == NULL){

p=G->LH[n1].firstarc=(ArcNode *) malloc (sizeof(ArcNode));

}

else{

while( p->nextarc !=NULL ){

p=p->nextarc;

}

p=p->nextarc=(ArcNode *) malloc (sizeof(ArcNode));

}

q=G->LH[n2].firstarc;

if(q == NULL){

q=G->LH[n2].firstarc=(ArcNode *) malloc (sizeof(ArcNode));

}

else{

while( q->nextarc !=NULL ){

q=q->nextarc;

}

q=q->nextarc=(ArcNode *) malloc (sizeof(ArcNode));

}

p->adjvex=n2;

p->weight=w;

p->nextarc=NULL;

q->adjvex=n1;

q->weight=w;

q->nextarc=NULL;

}

}

int search (Graph *G,char a){ //确定顶点a在头结点数组中的位置int i;

for(i=0;ivexnum;++i){

if(G->LH[i].data==a){

return i;

}

}

}

void printgraph(Graph *G){ //打印图

int i;

ArcNode *p;

for (i=0 ; i < G->vexnum; ++i)

{

p=G->LH[i].firstarc;

printf("data:%c \t",G->LH[i].data);

while(p!=NULL){

printf("firstarc->adjvex=%d",p->adjvex);

p=p->nextarc;

}

printf("\n");

}

}

相关文档
最新文档