图的深度和广度遍历 - 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

}

相关文档
最新文档