实验六:图的遍历与最小生成树

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

实验六图的邻接矩阵存储和最小生成树

一、实验目的

1.掌握图的邻接矩阵存储结构(或邻接表)

2.掌握图的深度优先遍历和广度优先遍历算法

2.掌握图的最小生成树算法(Prim算法)

二、实验内容

按下图所示无向带权图,实现以下各项功能。

图1 无向带权图

1.用图的邻接矩阵(或者邻接表)的方式存储图1的无向带权图。

2.输出该无向带权图的顶点序列以及权值集合(采用邻接矩阵存储)。

3.分别采用深度优先和广度优先算法遍历该无向图

4.采用Prim算法求该无向带权图的最小生成树。

要求:实验后用专用实验纸书写报告。报告中要说明实验题目,内容;分析实验过程,总结实验结果。

三、设计指导

1)创建一个头文件seqlist.h用来保存顺序表相关函数。

#define MaxSize 100

typedef char DataType;

typedef struct

{

DataType list[MaxSize];

int size;

}SeqList;

//初始化ListInitiate(L)

void ListInit(SeqList *L)

{

L->size = 0; /*定义初始数据元素个数*/

}

//求当前数据元素个数ListLength(L)

int ListLength(SeqList L)

{

return L.size;

}

//插入数据元素ListInsert(L, i, x)

int ListInsert(SeqList *L, int i, DataType x)

{

int j;

for(j = L->size; j > i; j--)

L->list[j] = L->list[j-1]; /*依次后移*/ L->list[i] = x; /*插入x*/

L->size ++; /*元素个数加1*/

return 1;

}

//删除数据元素ListDelete(L, i, x)

int ListDelete(SeqList *L, int i, DataType *x)

{

int j;

*x = L->list[i]; /*保存删除的元素到x中*/ for(j = i +1; j <= L->size-1; j++)

L->list[j-1] = L->list[j]; /*依次前移*/

L->size--; /*数据元素个数减1*/ return 1;

}

//取数据元素ListGet(L, i, x)

int ListGet(SeqList L, int i, DataType *x)

{

if(i < 0 || i > L.size-1)

{

printf("参数i不合法! \n");

return 0;

}

else

{

*x = L.list[i]; return 1;

}

}

2)创建一个头文件seqcqueue.h用来保存循环队列相关函数。#include

#define MaxQueueSize 20

typedef struct

{

DataType queue[MaxQueueSize];

int rear;

int front;

int count;

} SeqCQueue;

//初始化QueueInit(Q)

void QueueInit(SeqCQueue *Q)

{

Q->rear = 0;

Q->front = 0;

Q->count = 0;

}

//非空否QueueNotEmpty(Q)

int QueueNotEmpty(SeqCQueue Q)

{

if(Q.count != 0) return 1;

else return 0;

}

//入队列QueueAppend(Q, x)

int QueueAppend(SeqCQueue *Q, DataType x)

{

if(Q->count > 0 && Q->rear == Q->front) { printf("队列已满无法插入! \n");

return 0;

}

else

{ Q->queue[Q->rear] = x;

Q->rear = (Q->rear + 1) % MaxQueueSize;

Q->count++;

return 1;

}

}

//出队列QueueDelete(Q, d)

int QueueDelete(SeqCQueue *Q, DataType *d)

{

if(Q->count == 0)

{ printf("队列已空无数据元素出队列! \n");

return 0;

}

else

{ *d = Q->queue[Q->front];

Q->front = (Q->front + 1) % MaxQueueSize;

Q->count--;

return 1;

}

}

//取队头数据元素QueueGet(Q, d)

int QueueGet(SeqCQueue Q, DataType *d)

{

if(Q.count == 0)

{ printf("队列已空无数据元素可取! \n");

return 0;

}

else

{ *d = Q.queue[Q.front];

return 1;

}

}

3)主函数中包含的部分函数

#include

#include

#include "SeqList.h"

#include"SeqCQueue.h"

#define MaxWeight 10000

相关文档
最新文档