有向图无向图领接表深度优先广度优先最小生成树

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100
#define MAXEDGE 100
#define INFINITY 65535
#define MAXSIZE 100

typedef int Status;	                           /* Status是函数的类型 */
typedef int VertexType;                        /* 顶点类型 */
typedef int EdgeType;                          /* 边上的权值类型 */
typedef int Boolean;
Boolean visited[MAXVEX];


typedef struct
{
	VertexType vexs[MAXVEX];                    /* 顶点表 */
	EdgeType arc[MAXVEX][MAXVEX];               /* 邻接矩阵,看作边表 */
	int numNodes, numEdges;                     /* 图中当前的顶点数和边数  */
}MGraph;

typedef struct EdgeNode                         /* 边表结点 */
{
	int adjvex;                                 /* 邻接点域,存储该顶点对应的下标 */
	int weight;		                            /* 用于存储权值,对于非网图可以不需要(手绘图) */
	struct EdgeNode *next;                      /* 链域,指向下一个邻接点 */
}EdgeNode;

typedef struct VertexNode /* 顶点表结点 */
{
	int in;	/* 顶点入度 */
	int data; /* 顶点域,存储顶点信息 */
	EdgeNode *firstedge;/* 边表头指针 */
}VertexNode, AdjList[MAXVEX];

typedef struct
{
	AdjList adjList;
	int numNodes, numEdges; /* 图中当前顶点数和边数 */
}graphAdjList,*GraphAdjList;

typedef struct      /*对边集数组Edge结构的定义*/
{
    int begin;
    int end;
    int weight;
}Edge;

typedef struct
{
	int data[MAXSIZE];
	int front;    	        /* 头指针 */
	int rear;		        /* 尾指针 */
}Queue;

Status InitQueue(Queue *Q)  /* 初始化空队列Q */
{
	Q->front=0;
	Q->rear=0;
	return  OK;
}

Status QueueEmpty(Queue Q)  /*判断队列是否为空*/
{
	if(Q.front==Q.rear)     /* 队列空的标志 */
		return TRUE;
	else
		return FALSE;
}

Status EnQueue(Queue *Q,int e)      /*队列插入操作*/
{
	if ((Q->rear+1)%MAXSIZE == Q->front)	/* 队列满的判断 */
		return ERROR;
	Q->data[Q->rear]=e;			        /* 将元素e赋给队尾 */
	Q->rear=(Q->rear+1)%MAXSIZE;        /* rear指针向后移一位置, */
                                        /* 若到最后则转到数组头部 */
	return  OK;
}

Status DeQueue(Queue *Q,int *e)     /*队列删除操作*/
{
	if (Q->front == Q->rear)			/* 队列空的判断 */
		return ERROR;
	*e=Q->data[Q->front];				/* 将队头元素赋值给e */
	Q->front=(Q->front+1)%MAXSIZE;	    /* front指针向后移一位置, */
                                        /* 若到最后则转到数组头部 */
	return  OK;
}

Status  CreateMGraph(MGraph *G)            /* 无向网图邻接矩阵表示 */
{
	int i,j,k,w;
	//char v[1000];
	printf("输入顶点数和边数:\n");
	scanf("%d%d",&G->numNodes,&G->numEdges); /* 输入顶点数和边数 */
	for(i=0;i<G->numNodes;i++)
           //scanf(&G->vexs[i]);
           G->vexs[i]=i;                    /* 建立顶点表 */
    for(i=0;i<G->numNodes;i++)
		for(j=0;j<G->numNodes;j++)
			{
			    if(i==j)
                    G->arc[i][j]=0;
                else
                G->arc[i][j]=INFINITY;
			}

			printf("对于非网图另权为1\n");	                /* 邻接矩阵初始化 */
	for(k=0;k<G->numEdges;k++)               /* 建立邻接矩阵 */
	{
		printf("输入第%d条边(vi,vj)上的下标i,下标j和权w:\n",k+1);

		scanf("%d%d%d",&i,&j,&w);
		G->arc[i][j]=w;
		G->arc[j][i]= G->arc[i][j];             /* 无向图,矩阵对称 */
	}
	PrintGraph(G);
	return OK;
}

Status CreateDGraph(MGraph *G)               /* 有向网图邻接矩阵表示 */
{
    int v1,v2,i,j,k,w;
    //char ch;
    printf("图顶点数和弧数:");             /*确定图顶点数和边数*/
    scanf("%d%d",&G->numN
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值