赞
踩
#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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。