#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
#define MAX_VERTEX_NUM 20//最大顶点数
#define MaxSize 400
typedef int QueueElementType;
typedef enum GraphKind{AG,DG,AN,DN,NONE};//图的种类{无向图,有向图,无向网络,有向网络,无种类}
bool visited[MAX_VERTEX_NUM];
typedef char InfoType;
typedef int VertexType;
typedef struct ArcNode//网络多一个int weight域
{
int adjvex;//该边(或弧)所指向的顶点的下标
struct ArcNode* nextarc;//指向下一个边结点的指针
//int weight;//在该程序中不需要使用
//InfoType info;//指向边或弧所代表的信息的指针,在该程序中不需要使用
}ArcNode;//边节点
typedef struct VNode//顶点节点
{
VertexType data;//顶点信息
ArcNode* firstarc;//指向第一个依附该顶点的边节点的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct Graph
{
AdjList vertex;//邻接表
int vexnum,arcnum;//顶点数、边(或弧)数
GraphKind kind;//图的种类
}Graph;
typedef struct
{
QueueElementType *base;
int front,rear;
}SeqQueue;
SeqQueue InitQueue()
{
SeqQueue Q;
//申请存储空间
Q.base=(QueueElementType *)malloc(MaxSize *sizeof(QueueElementType));
if(!Q.base)
{
cout<<"内存申请失败,退出程序!"<<endl;
exit(0);
}
Q.front=Q.rear=0;//队列置空
return Q;
}
int QueueEmpty(SeqQueue Q)
{
return (Q.front==Q.rear)?1:0;//队空返回1,非空返回0
}
int QueueFull(SeqQueue Q)
{
return (Q.front==(Q.rear+1)%MaxSize)?1:0;//队满返回1,非满返回0
}
void EnQueue(SeqQueue &Q,QueueElementType x)
{
if(QueueFull(Q))
{
cout<<"队满,入队操作失败!"<<endl;//队满,不能入队