图的深度和广度遍历 - 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
一、实验目的和内容
1.实验目的
掌握图的邻接矩阵的存储结构;实现图的两种遍历:深度优先遍历和广度优先遍历。
2.实验内容
1.图的初始化;
2.图的遍历:深度优先遍历和广度优先遍历。
二、实验方案
程序主要代码:
///
///邻接矩阵的节点数据
///
public struct ArcCell
{
public int Type; //顶点的关系类型,对无权图,用1或0表示相邻;
//对带权图,则为权值类型。
public object Data; //该弧相关信息
public ArcCell(int type,object data)
{
Type = type;
Data = data;
}
}
///
///图的类型
///
public enum GKind {DG,DN,UDG,UDN}; //有向图,有向网,无向图,无向网
///
///图类
///
public class Graph
{
public static int Max_Vertex_Num = 20; //最大顶点数
private object [] Vexs; //顶点数据数组
private ArcCell [,] Arcs; //邻接矩阵
private GKind Kind; //图的种类
private int VexNum,ArcNum; //当前顶点数和弧数
///
///图的初始化方法
///
///顶点数
///弧数
///图的类型
public Graph(int vexnum,int arcnum,GKind k)
{
VexNum = vexnum;
ArcNum = arcnum;
Kind = k;
Vexs = new object[Max_Vertex_Num];
Arcs = new ArcCell[Max_Vertex_Num,Max_Vertex_Num];
}
///
///设置v1,v2之间的弧的权值,顶点的关系类型,对无权图,用1或0表示相邻;
///对带权图,则为权值类型。
///
///顶点1
///顶点2
///权
///
public bool SetArcInfo(int v1,int v2,int adj,object data)
{
if(v1 { Arcs[v1,v2].Type = adj; Arcs[v1,v2].Data = data; switch(Kind) { case GKind.DG: break; case GKind.UDG: Arcs[v2,v1].Type = adj; Arcs[v2,v1].Data = data; break; case GKind.DN: break; case GKind.UDN: break; } return true; } else return false; } /// ///设置指定顶点的信息 /// ///顶点号 ///要设置的信息 /// public bool SetVexInfo(int v,object info) { if(v { Vexs[v] = info; return true; } else return false; } /// ///返回v的第一个邻接顶点,若没有则返回-1 /// public int FirstAdjVex(int v) { for(int j=0;j { if((this.Arcs[v,j].Type>0)&&(this.Arcs[v,j].Type return j; } }