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