邻接矩阵表示的带权有向图

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

实习报告——“邻接矩阵表示的带权有向图”演示程序(一)、程序的功能和特点

主要实现的功能:1.使用邻接矩阵表示带权有向图;

2.查找指定顶点序号;

3.判断图是否为空;

4.判断图是否满;

5.取得顶点数、边数、一条边的权值;

6.插入一个顶点、边;

7.删除一个顶点、边;

(二)、程序的算法设计

“邻接矩阵的表示”算法:

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

逻辑结构:非线性结构——网状结构

存储结构:内存中连续的存储结构,邻接矩阵

2.【基本操作设计】

按指定输入,生成图并打印该图

删除一个顶点并打印

删除一条边并打印

3. 【算法设计】

插入一个顶点的算法:

首先判断该图是否已满,若已满:插入失败;

否则进行插入:1.顶点表增加一个元素

2.邻接矩阵增加一行一列

删除一个顶点的算法:

判断要删除顶点的存在性,若不存在:出错;

否则:1.修改顶点表,即在顶点数组中删除

该点;

2.修改邻接矩阵,即需要统计与该顶

点相关联的边,并将这些边也删除4.【高级语言代码】

public class Graph {

static int MaxEdges=50;

static int MaxVertices=10;

static int MaxValue=9999;//无穷大

//存放顶点的数组

private char VerticesList[]=new char[MaxVertices]; //邻接矩阵(存放两个顶点的权值)

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

private int CurrentEdges;//现有边数

private int CurrentVertices;//现有顶点数

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

public Graph(){

for(int i=0;i

for(int j=0;j

if(i==j)

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

else

Edge[i][j]=MaxValue;

CurrentEdges=0;//现有边数

CurrentVertices=0;//现有顶点数

}

//取得一条边的权值

public int GetWeigh(int v1,int v2){

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

return -1;//用-1表示出错

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

return -1;//用-1表示出错

return Edge[v1][v2];

}

//取得第一个邻接点的序号

public int GetFirstNeighbor(int v){

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

return -1;

//邻接矩阵的行号和列号是两个邻接点的序号

for(int col=0;col0&&Edge[v][col]

return -1;

}

//插入一个顶点

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;//插入位置

}

//插入一个边

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

return false;//出错

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

return false;//出错

Edge[v1][v2]=weight;

return true;

}

//删除一个顶点

public boolean RemoveVertex(int v){ if(v<0||v>CurrentVertices-1)

return false;//出错

//修改顶点表

for(int i=v+1;i

//修改邻接矩阵

int k=0;//累计将要删去的边数

for(int i=0;i

if(Edge[v][i]>0&&Edge[v][i]

for(int i=0;i

if(Edge[i][v]>0&&Edge[i][v]

//覆盖第v行

int j;

for(int i=v+1;i

Edge[i-1][j]=Edge[i][j];

//覆盖第v列

相关文档
最新文档