邻接表加边的算法如何写?

邻接表加边的算法如何写?,第1张

/*用邻接矩阵实现图*/

#include <stdio.h>

#include<stdlib.h>

#define WItem int

typedef struct graph *Graph

struct graph

{

WItem NoEdge /*无边标记*/

int n/*顶点数*/

int e/*边数*/

WItem **a/*邻接矩阵*/

}AWDgraph

Graph Graphinit(int n,WItem noEdge) /*创建图*/

{

int i,j

Graph G=(struct graph *)malloc(sizeof (*G))

G->n=n

G->e=0

G->NoEdge=noEdge

a=(WItem**)malloc(sizeof(WItem)*n*n)

for(i=0i<G->n+1i++)

{

for (j=0j<G->n+1j++)

G->a[i][j]=G->NoEdge

}

return G

}

int GraphEdges(Graph(G)) /*输出边数*/

int GraphVertices(Graph(G)) /*输出顶点数*/

int GraphExist(int i,int j,Graph G) /*判断边是否存在*/

{

if(i<1||j<1||i>G->n||G->a[i][j]==G->NoEdge) return 0

return 1

}

void GraphAdd(int i,int j,WItem w,Graph G) /*加入一条边*/

{

if(i<1||j<1||i>G->n||G->n||i==j||G->a[i][j]!=G->NoEdge)

printf("Bad input")

G->a[i][j]=w

G->e++

}

void GraphDelete(int i,int j,Graph G) /*删除一条边*/

{

if(i<1||j<1||i>G->n||j>G->n||G->a[i][j]==G->NoEdge)

printf("Bad input")

G->a[i][j]=G->NoEdge

G->e--

}

int OutDegree(int i,Graph G) /*计算出度*/

{

int j,sum=0

if(i<1||i>G->n) printf("Bad input")

for(j=1j<=G->nj++)

if(G->a[i][j]!=G->NoEdge) sum++

return sum

}

int InDegree(int i,Graph G) /*计算入度*/

{

int j,sum=0

if(i<1||i>G->n) printf("Bad input")

for(j=1j<=G->nj++)

if(G->a[i][j]!=G->NoEdge) sum++

return sum

}

/*输出表*/

void GraphOut(Graph G)

{

int i,j

for(i=1i<=G->ni++)

{

for(j=1j<=G->nj++)

{printf("%d",G->a[i][j])

printf("\n")}

}

}

void main() /*测试该图类型数据结构算法*/

{

int p,q,n,e,i,j,w,noEdge

Graph G

noEdge=0

printf("几个结点\n")

scanf("%d",&n)

Graph Graphinit(int n,WItem noEdge)

printf("加入几条边\n")

scanf("%d",&e)

for(p=0p<ep++)

{

printf("边的权值为多少?")

scanf("%d",&w)

printf("在哪加边?")

scanf("%d,%d",&i,&j)

void GraphAdd(int i,int j, int w,Graph G)

}

for(i=1i<=G->ni++)

{

for(j=1j<=G->nj++)

printf("%d",G->a[i][j])

}

}

邻接表,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。

对于无向图来说,使用邻接表进行存储也会出现数据冗余,表头结点A所指链表中存在一个指向C的表结点的同时,表头结点C所指链表也会存在一个指向A的表结点。

/* MGraph.cc: 图的邻接矩阵存储表示和实现 */

/* 包含图类型Graph定义;创建图;深度优先遍历;广度优先遍历 */

/* 用到引用型参数,在TC下无法通过编译,VC等C++编译器可通过 */

#include <stdio.h>

#include <string.h>

#include <limits.h> //含INT_MAX

#define VType     char    //顶点值类型

#define EType     int     //边权值类型

#define MAXVNUM   50      //最大顶点个数

#define DIGRAPH   0       //有向图(网)

#define UNDIGRAPH 1       //无向图(网)

#define INVALID   INT_MAX //无效权值(最大整数表示无穷大)

#define EMPTY     -1      //"空"顶点序号


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11555091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存