- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图,数据结构实验
实验内容: 实验时间:2012 年 06 月 15 日
1.编写函数,采用邻接矩阵表示法,构造一个无向网。
2.编写函数,实现从键盘输入数据,建立一个有向图的邻接表。
3.编写函数,输出该邻接表。
4.编写函数,采用邻接表存储实现无向图的深度优先非递归遍历。
5.编写函数,采用邻接表存储实现无向图的广度优先遍历。
6.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
实验目的及要求:
1.掌握图的存储思想及其存储实现
2.掌握图的深度、广度优先遍历算法思想及其程序实现
3.掌握图的常见应用算法的思想及其程序实现
实验内容、方法与步骤:(使用附页填写并附在本页后)
实验结果:
小结:
通过这次实验,我掌握了图的存储思想及其存储实现,认识到图的深度、广度优先遍历算法思想及其程序实现,深刻了解了图的常见应用算法的思想及其实现程序。
#include stdio.h
#includestdlib.h
#includestring.h
#define MaxVertexNum 10 /* 顶点最大个数 */
#define MAXSIZE 100
#define INFINITY 10000 /* 用10000代替∞ */
typedef struct ArcCell
{ int adj;
}ArcCell,AdjMatrix[MaxVertexNum][MaxVertexNum];
typedef struct
{int vexs[MaxVertexNum];
AdjMatrix arcs;
int vexnum,arcnum;
}Mgragh;
/*构造无向网 */
Mgragh *CreateUDN(Mgragh *N)
{
int i,j,k,w;
int v1,v2;
printf(\t输入顶点个数和边数:);
scanf(\t%d %d,N-vexnum,N-arcnum);
printf(\t输入%d个顶点的元素:,N-vexnum);
for(i=0;iN-vexnum;i++){
scanf(\t%d,N-vexs[i]); }
for(i=0;iN-vexnum;i++)
for(j=0;jN-vexnum;j++)
N-arcs[i][j].adj=INFINITY;
for(k=0;kN-arcnum;k++){
printf(\t输入第%d条边所依附的顶点:,k+1);
scanf(\t%d%d,v1,v2);
printf(\t输入权值:);
scanf(\t%d,w);
for(i=0;iN-vexnum;i++)
if(v1==N-vexs[i]) break;
for(j=0;jN-vexnum;j++)
if(v2==N-vexs[j]) break;
N-arcs[i][j].adj=w;
N-arcs[j][i]=N-arcs[i][j];
} printf(\t );
for(i=0;iN-vexnum;i++) printf( \t v%d,N-vexs[i]); printf(\t\n);
for(i=0;iN-vexnum;i++){
printf(\t v%d,N-vexs[i]);
for(j=0;jN-vexnum;j++)
printf(\t %3d ,N-arcs[i][j].adj); printf(\n);
}
return N;
}
/* 邻接表的类型定义 */
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int weight; //边的权
}ArcNode; //表结点
typedef struct VNode
{ int degree,indegree;//顶点的度,入度
int data;
ArcNode *firstarc;
}VNode,AdjList[MaxVertexNum];
typedef struct
{ AdjList vertices;
int vexnum,arcnum;//顶点的实际数,边的实际数
}ALGraph;
#define TRUE 0
#define FALSE -1
/* 确定位置 */
int LocateVex(ALGraph *G,int v)
{ int i;
for(i=0;v!=G-vertices[i].dataiG-vexnum;i++);
if(iG-vexnum)
return -
文档评论(0)