- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验六 图遍历操作的实现
一、实验学时: 2学时
二、实验目的
1.实现图的基本操作
2.实现图的遍历操作
三、实验内容(2,3选做)
1. 深度优先和广度优先搜索图
2. 求图的关键路径
3.求图的最短路径
四、主要仪器设备及耗材
硬件:计算机一台
软件:VC++?6.0,MSDN2003或者以上版本
五、实验步骤
1. 分析问题
2. 写出算法
3. 编制程序
4. 上机调试
5. 分析结果
六、程序清单
#include iostream
#include stdlib.h
using namespace std;
#define MaxInt 32767 //权值的最大值
#define MVNum 100 //最大顶点数
#define max 50
//邻接矩阵存储结构定义
typedef struct{
char vexs[MVNum]; //存放顶点的数组
int arcs[MVNum][MVNum]; //存放邻接矩阵的数组
int vexnum,arcnum; //顶点数和边(弧)数
}AMGraph;
//边(弧)结点结构定义
typedef struct ArcNode{
int adjvex;
struct ArcNode* nextarc;
int weight;
}ArcNode;
//顶点类型定义
typedef struct VNode{
char data;
ArcNode* firstarc;
}VNode,AdjList[MVNum]; //顶点数组类型定义
//邻接表结构定义
typedef struct{
AdjList vertices; //顶点数组
int vexnum,arcnum; //顶点数和边(弧)数
}ALGraph;
//顺序队列结构定义
typedef struct{
int front; //队头
int rear; //队尾
char base[MVNum]; //存放队列元素的数组
}SqQueue;
bool visited[MVNum]; //存放图中顶点访问标志的数组
//初始化队列
void InitQueue(SqQueue Q)
{
Q.front = Q.rear = 0;
}
//判断队列Q是否为空,为空返回true,非空返回false
bool QueueEmpty(SqQueue Q)
{
if(Q.rear == Q.front )
return true;
else
return false;
}
//入队操作,将n插入顺序队列Q的尾部
void EnQueue(SqQueue Q,int n)
{
if(Q.rear-Q.front == MVNum) //队满时,不能执行入队操作
exit(-1);
else
{
Q.base[Q.rear] = n;
Q.rear++;
}
}
//出队操作,删除队列Q的队头元素,被删元素用n返回
void DeQueue(SqQueue Q,int n)
{
if(QueueEmpty(Q)) //若队列为空,不能执行出队操作
exit(-1);
else
{
n = Q.base [Q.front];
Q.front++;
}
}
//在以邻接表方式存储的图G中,查找值为ch的顶点的位置
int LocateVex(ALGraph G,char ch)
{
for(int i=0;iG.vexnum;++i)
{
if(G.vertices[i].data == ch)
return i;
}
}
//在以邻接矩阵方式存储的图G中,查找值为ch的顶点的位置
int LocateVex1(AMGraph G,char ch)
{
for(int i=0;iG.vexnum;i++)
{
if(G.vexs[i] == ch)
return i;
}
}
//以邻接表为存储结构,创建无向图G
void CreateUDG_AL(ALGraph G)
{
int i, j, k;
char v1, v2;
ArcNode *p1,*p2;
cout请输入要创建的无向图的顶点数和边数,中间用空格分隔:endl;
cinG.vexnumG.arcnum; //输入总顶点数,总边数
cout请输入图中的顶点endl;
for(i=0;iG.vexnum;i++) //将顶点依次存储在数组G.vertice
文档评论(0)