“邻接矩阵表示的带权有向图(网)”演示程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级:信息1102 姓名:贾孟涛

========实习报告十四“邻接矩阵表示的带权有向图(网)”演示程序==========

(一)、程序的功能和特点

该程序可以建立有向图的带权邻接矩阵,能够对建立的邻接矩阵进行添加顶点,添加边和删除顶点,删除边的操作,并能显示输出邻接矩阵。该程序的特点是采用java面向对象语言,对边,顶点和邻接矩阵用类进行封装。采用链式存储结构。

(二)、程序的算法设计

算法一:“插入一个顶点”算法:

1.【逻辑结构与存储结构设计】

逻辑结构:线性结构。

存储结构:顺序存储与链式存储结合。

2.【基本操作设计】

文字说明:

创建新结点,找到结点L位置,在 L后插入新结点。

3.【算法设计】

文字说明:

(1).首先判断顶点表是否满。

(2).若满则插入失败,放回false。

(3).顶点表若不满,创建新顶点,将新顶点加入顶点表。

(4).插入顶点成功,返回true。

4.【高级语言代码】

//插入一个顶点

public int InsertVertex ( char vertex ){

if(IsGraphFull()) return -1; //插入失败

//顶点表增加一个元素

VerticesList[CurrentVertices]=vertex;

//邻接矩阵增加一行一列

for ( int j = 0;j <=CurrentVertices;j++ ) {

Edge[CurrentEdges][j]=MaxValue;

Edge[j][CurrentEdges]=MaxValue;

}

Edge[CurrentEdges][CurrentEdges]=0;

CurrentVertices++;

return CurrentVertices; //插入位置

}

算法二:“插入一条边”算法:

1.【逻辑结构与存储结构设计】

逻辑结构:线性结构。

存储结构:链式存储结构。

3.【基本操作设计】

文字说明:

创建新边结点,再将新创建的边结点插入图中。

4.【算法设计】

文字说明:

(1).首先判断插入边上的两个顶点编号是否越界。

if (v1 < 0 || v1 > CurrentVertices - 1) return false; if (v2 < 0 || v2 > CurrentVertices - 1) return false; (2).如果越界则插入失败,返回false。

(3).否则创建新边结点

(4).再将新创建的边结点插入图中

(5) .插入成功返回true。

4.【高级语言代码】

//插入一个边

public boolean InsertEdge( int v1, int v2, double weight){ if (v1 < 0 || v1 > CurrentVertices - 1)

return false; //出错

if (v2 < 0 || v2 > CurrentVertices - 1)

return false;

Edge[v1][v2]=weight; //网,有向边

return true;

}

(三)、程序中类的设计

“Graph”类:

1.【逻辑结构与存储结构】

逻辑结构:网状结构。

存储结构:顺序存储与链式存储结合。

2.【主要成员变量说明】

static int MaxEdges = 50;

static int MaxVertices = 10;

static double MaxValue=9999.9; //无穷大

//存放顶点的数组

private char VerticesList[]=new char[MaxVertices];

//邻接矩阵(存放两个顶点权值)

private double Edge[][]=new double[MaxVertices][MaxVertices];

private int CurrentEdges; //现有边数

private int CurrentVertices; //现有顶点数

//构造函数:建立空的邻接矩阵

3.【主要成员方法说明】

public Graph ( ):为定义的构造函数,建立空的邻接矩阵。

public int FindVertex (char vertex):查找指定的顶点的序号

public boolean IsGraphEmpty ( ):判断图是否为空。

public boolean IsGraphFull ( ):判断图是否为满。

public char GetValue ( int i ):按顶点序号返回顶点数据。

public int NumberOfVertices ( ):返回图的顶点数。

public int NumberOfEdges ( ):返回图的边数。

public double GetWeight ( int v1, int v2 ):取得一条边的权值。

public int GetFirstNeighbor ( int v ):取得第一个邻接点的序号

public int InsertVertex ( char vertex ):插入一个顶点。

public boolean RemoveVertex ( int v ):删除一个顶点。

public boolean InsertEdge ( int v1,int v2,double weight ):插入一条边。

public boolean RemoveEdge ( int v1, int v2 ):删除一条边。

public void display():显示邻接矩阵。

4.【高级语言代码】

// “邻接矩阵”类

class Graph {

static int MaxEdges = 50;

static int MaxVertices = 10;

static double MaxValue=9999.9; //无穷大

//存放顶点的数组

private char VerticesList[]=new char[MaxVertices];

//邻接矩阵(存放两个顶点权值)

private double Edge[][]=new double[MaxVertices][MaxVertices];

private int CurrentEdges; //现有边数

private int CurrentVertices; //现有顶点数

//构造函数:建立空的邻接矩阵

public Graph ( ){

for ( int i = 0; i < MaxVertices; i++ )

for ( int j = 0; j < MaxVertices; j++ )

if(i==j)

Edge[i][j] = 0; //对角线

else //非对角线上无穷大

Edge[i][j] =MaxValue;

相关文档
最新文档