无向图两顶点的连通性及删除边

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

#include

using namespace std;

#define MAX_VERTEX_NUM 20

#define OK 1

#define ERROR 0

#define OVERFLOW -1

#define INIT_SIZE 50

#define INCREMENT 10

typedef enum{ DG, DN, UDG, UDN } GraphKind;

typedef int status;

typedef int ElemType;

typedef struct ArcNode // 弧结点

{ int adjvex; //邻接点域,存放与Vi邻接的点在表头数组中的位置struct ArcNode *nextarc; //链域,指示依附于vi的下一条边或弧的结点,}ArcNode;

typedef struct VNode //表头结点

{ char vexdata; //存放顶点信息

struct ArcNode *firstarc; //指示第一个邻接点

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct { //图的结构定义

AdjList vertices; //顶点向量

int vexnum, arcnum;

// GraphKind kind=0; // 图的种类标志

} MGraph;

int LocateVex(MGraph &G,char v){

for(int i=0;i

if(G.vertices[i].vexdata==v)

return i;

}

return -1;

}

void CreateGraph(MGraph &G)

{// 生成图G的存储结构-邻接表无向图

cout<<"输入顶点数、边数:"<

cin >> G.vexnum >> G.arcnum ; // 输入顶点数、边数和图类

// G.vexnum=5;G.arcnum=7;

cout<<"输入顶点:"<

for (int i=0; i

// 构造顶点数组:

cin>> G.vertices[i].vexdata; // 输入顶点

G.vertices[i].firstarc = NULL;

}

cout<<"输入各边:"<

for (int k=0; k

{

char sv,tv;

cin>>sv>> tv; // 输入一条边(弧)的始点和终点

i = LocateVex(G, sv);

int j = LocateVex(G, tv);// 确定sv和tv在G中位置,即顶点在G.vertices中的序号

ArcNode * pi = new ArcNode;

ArcNode * pj = new ArcNode;

if (!pi)

exit(-1);

if (!pj)

exit(-1);

pi -> adjvex = j;

// 对弧结点赋邻接点"位置

pi -> nextarc = G.vertices[i].firstarc;//头插法,将tv结点插入到第i个单链表中

G.vertices[i].firstarc = pi; // 插入链表G.vertices[i]

pj -> adjvex = i;

pj -> nextarc = G.vertices[j].firstarc;

G.vertices[j].firstarc = pj;

}

cout<<"构造成功!"<

}

//删除连接x y的边

status Deleteside(MGraph &G,int x,int y)

{

ArcNode * p=G.vertices[x].firstarc;

ArcNode * q=G.vertices[x].firstarc;

while(p&&p->adjvex!=y)

{

q=p;

p=p->nextarc;

}

if(!p)

return 0;

if (p==G.vertices[x].firstarc)

{

G.vertices[x].firstarc=p->nextarc;

}

else

q->nextarc=p->nextarc;

delete p;

p=G.vertices[y].firstarc;

q=G.vertices[y].firstarc;

while(p&&p->adjvex!=x)

{

q=p;

p=p->nextarc;

}

if(!p)

return 0;

if (p==G.vertices[y].firstarc)

{

G.vertices[y].firstarc=p->nextarc;

}

else

q->nextarc=p->nextarc;

delete p;

return 1;

}

typedef struct Node

{

int data;

struct Node *next;

}QNode,*QueuePtr;

typedef struct

{

QueuePtr front;

QueuePtr rear;

}LinkQueue;

bool visited[10];

ArcNode *nextnode=NULL;//全局变量

相关文档
最新文档