数据结构中图的全部操作

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

#include

#include

#include

#include

#include

#include

using namespace std;

#define MAX_VERTEX_NUM 100

#define INFINITY INT_MAX

#define EXTERN 10

#define OK 1

#define ERROR -1

#define MAX -1

#define MAXW 10000

typedef int Status;

typedef bool VisitIf;

typedef char VertexType;//顶点数据类型

typedef int VRType; //顶点关系( 表示是否相邻) typedef int InfoType; //弧相关信息

typedef enum{DG,DN,UDG,UDN} GraphKind;//图的类型

bool visited[MAX_VERTEX_NUM];

//邻接矩阵

typedef struct ArcCell

{

VRType adj;//权值

InfoType *info;

}ArcCell,AdjMartix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct

{

VertexType vexs[MAX_VERTEX_NUM]; //顶点向量

AdjMartix arcs; //邻接矩阵

int vexnum,arcnum; //图当前顶点数,弧数 GraphKind Kind; //图的类型

}MGraph;

bool VexExist(MGraph G,VertexType v)//判断定点是否在图中{

int i;

for(i=0;i

if(G.vexs[i]==v)

return true;

return false;

}

Status CreatUDN(MGraph &G) //构造无向网

{

int i,j,w;

char ch;

VertexType v1,v2;

Status LocateVex(MGraph G,VertexType v); //函数声明

cout<<"输入顶点数,弧数:"<

cin>>G.vexnum>>G.arcnum; //输入当前顶点数弧数是否有弧信息

cout<<"输入顶点(字符型):"<

for(i=0;i

{

for(j=0;j

{

G.arcs[i][j].adj=MAX;

G.arcs[i][j].info=NULL;

}

}

for(i=0;i

{

cout<<"输入第"<

cin>>ch;

if(VexExist(G,ch)) //判断是否存在 {

cout<<"顶点输入有误!"<

i--;

}

else G.vexs[i]=ch;

}

for(int k=0;k

{

cout<<"输入第"<

cin>>v1>>v2;

cout<<"输入弧的权值:"<

cin>>w;

if((i=LocateVex(G,v1))!=-2)//

if((j=LocateVex(G,v2))!=-2)

{

G.arcs[i][j].adj=w;//对弧写入权值

G.arcs[j][i].adj=w;//对称弧赋值

k++;

continue;

};

cout<<"顶点输入错误!";

}

return OK;

}

Status LocateVex(MGraph G,VertexType v) //若图中存在v,返回v在图中的位置

{

for(int i=0;i

{

if(v==G.vexs[i])

return i;

}

return -2;

}

//对无向图求每个顶点的度,或对有向图求每个顶点的入度和出度(5分)

Status GetDegree(MGraph G,VertexType v)

{

int i=0;

int degree=0;

i=LocateVex(G,v);////若图中存在v,返回v在图中的位置

if(i!=-2)//如果存在

for(int j=0;j

if(G.arcs[i][j].adj>0) degree++;

if(i==-2)

{

cout<<"顶点输入有误!"<

return ERROR;

}

return degree;

}

// 完成插入顶点和边(或弧)的功能(5分)

Status InsertVex(MGraph &G,VertexType v) //图中插入顶点{

int k=G.vexnum;

if(G.vexnum

{

G.vexs[k]=v;

G.vexnum++;

for(int i=0;i

{

G.arcs[k][i].adj=MAX;

相关文档
最新文档