山东大学数据结构实验报告八.docx
- 文档编号:11446114
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:23
- 大小:55.17KB
山东大学数据结构实验报告八.docx
《山东大学数据结构实验报告八.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构实验报告八.docx(23页珍藏版)》请在冰豆网上搜索。
山东大学数据结构实验报告八
山东大学软件工程学院
数据结构课程实验报告
学号:
姓名:
班级:
软件工程2014级2班
实验题目:
图的操作
实验学时:
实验日期:
2015.12.9
实验目的:
掌握图的基本概念,描述方法;遍历方法。
硬件环境:
实验室
软件环境:
VistualStudio2013
实验步骤与内容:
实验内容:
1、创建图类。
二叉树的存储结构使用邻接矩阵或链表。
2、提供操作:
遍历、BFS、DFS
3、对建立好的图,执行上述各操作。
4、输出生成树。
5、输出最小生成树。
代码体:
Adjacencywdigraph.h
#ifndefADJACENCYWDIGRAPH_H
#defineADJACENCYWDIGRAPH_H
classAdjacencyWDigraph{
friendclassAdjacencyWGraph;
public:
AdjacencyWDigraph(intVertices=10,intnoEnge=0);
~AdjacencyWDigraph();
boolExist(inti,intj)const;
intEdges()const{returne;}
intVertices()const{returnn;}
AdjacencyWDigraph&Add(inti,intj,constint&w=1);
AdjacencyWDigraph&Delete(inti,intj);
intOutDegree(inti)const;
intInDegree(inti)const;
voidInitializePos(){pos=newint[n+1];}
voidDeactivatePos(){delete[]pos;}
intBegin(inti);
intNextVertex(inti);
voidBFS(intv,intreach[],intlabel=1);
voidDFS(intv,intreach[],intlabel=1);
boolConnected(int&x);
int**SpanningTree();
int**SpanningMinTree();
voidOutPut();
private:
intMinNum();
intMin(intv,intreach[]);
boolConnecting(inti);
voiddfs(intv,intreach[],intlabel);
intNoEdge,n,e;
int**a;
int*pos;
};
#endif
Adjacencywdigraph.cpp
#include
#include
usingnamespacestd;
#include"adjacencywdigraph.h"
AdjacencyWDigraph:
:
AdjacencyWDigraph(intVertices,intnoEdge){
n=Vertices;
e=0;
NoEdge=noEdge;
a=newint*[n+1];
for(inti=1;i<=n;i++)
a[i]=newint[n+1];
for(inti=1;i<=n;i++)
for(intj=1;j<=n;j++)
a[i][j]=NoEdge;
}
AdjacencyWDigraph:
:
~AdjacencyWDigraph(){
for(inti=1;i<=n;i++)
delete[]a[i];
delete[]a;
}
boolAdjacencyWDigraph:
:
Exist(inti,intj)const{
if(i<1||j<1||i>n||j>n||a[i][j]==NoEdge)
returnfalse;
returntrue;
}
AdjacencyWDigraph&AdjacencyWDigraph:
:
Add(inti,intj,constint&w){
if(i<1||j<1||i>n||j>n)
cout<<"错误!
点"<
elseif(a[i][j]!
=NoEdge)
cout<<"错误!
该边已存在,无法再添加"< else{ a[i][j]=w; e++; } return*this; } AdjacencyWDigraph&AdjacencyWDigraph: : Delete(inti,intj){ if(i<1||j<1||i>n||j>n||a[i][j]==NoEdge) cout<<"错误! 该边不存在,无法删除"< else{ a[i][j]=NoEdge; e--; } return*this; } intAdjacencyWDigraph: : OutDegree(inti)const{ if(i<1||i>n){ cout<<"错误,该点不存在! "< return0; } else{ intsum=0; for(intj=1;j<=n;j++) if(a[i][j]! =NoEdge) sum++; returnsum; } } intAdjacencyWDigraph: : InDegree(inti)const{ if(i<1||i>n){ cout<<"错误,该点不存在! "< return0; } else{ intsum=0; for(intj=1;j<=n;j++) if(a[j][i]! =NoEdge) sum++; returnsum; } } intAdjacencyWDigraph: : Begin(inti){ if(i<1||i>n){ cout<<"错误,该点不存在! "< return0; } else{ for(intj=1;j<=n;j++) if(a[i][j]! =NoEdge){ pos[i]=j; returnj; } pos[i]=n+1; return0; } } intAdjacencyWDigraph: : NextVertex(inti){ if(i<1||i>n){ cout<<"错误,该点不存在! "< return0; } else{ for(intj=pos[i]+1;j<=n;j++) if(a[i][j]! =NoEdge){ pos[i]=j; returnj; } pos[i]=n+1; return0; } } voidAdjacencyWDigraph: : BFS(intv,intreach[],intlabel){ if(v<1||v>n){ cout<<"错误,该点不存在! "< return; } queue InitializePos(); reach[v]=label; q.push(v); while(! q.empty()){ intw=q.front(); q.pop(); intu=Begin(w); while(u){ if(! reach[u]){ q.push(u); reach[u]=label; } u=NextVertex(w); } } DeactivatePos(); } voidAdjacencyWDigraph: : dfs(intv,intreach[],intlabel){ reach[v]=label; intu=Begin(v); while(u){ if(! reach[u]) dfs(u,reach,label); u=NextVertex(v); } } voidAdjacencyWDigraph: : DFS(intv,intreach[],intlabel){ if(v<1||v>n){ cout<<"错误,该点不存在!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 数据结构 实验 报告