有向网的三种创建和深度广度遍历
#include <iostream>
#include <iomanip>
using namespace std;
#define MAX_VERTEX 20 //最大顶点个数
#define INFINITY 0 //表示极大值
int visited[MAX_VERTEX] = { 0 };
//邻接矩阵
typedef struct {
int vertexnum;
int arcnum;
int arcs[MAX_VERTEX][MAX_VERTEX];
char vertex[MAX_VERTEX];
}AdjMatrix;
//边结构
typedef struct ArcNode{
int adjvex; //顶点
int weight; //权值
ArcNode *next;
}ArcNode;
//顶点结构
typedef struct VertexNode {
char vexdata;
ArcNode *head;
}VertexNode;
//邻接表
typedef struct {
VertexNode vertex[MAX_VERTEX];
int vertexnum;
int arcnum;
}AdjList;
//队列结点
typedef struct qNode {
int data;
qNode *next;
}QueueNode;
//队列
typedef struct queue {
QueueNode *front;
QueueNode *rear;
}Queue;
//初始化队列
Queue* InitQueue() {
Queue *Q;
QueueNode *qNode;
Q = (Queue*)malloc(sizeof(Queue));
qNode = (QueueNode*)malloc(sizeof(QueueNode));
qNode->next = NULL;
Q->front = Q->rear = qNode;
return Q;
}
//判空
int isEmpty(Queue *Q) {
if (Q->front == Q->rear)
return 1;
return 0;
}
//入队
void InQueue(Queue *Q, int x) {
QueueNode *temp;
if (temp = (QueueNode*)malloc(sizeof(QueueNode)))
{
temp->data = x;
temp->next = NULL;
Q->rear->next = temp;
Q->rear = temp;
}
}
//出队
void OutQueue(Queue *Q, int *x) {
QueueNode *temp;
if (!isEmpty(Q))
{
temp = Q->front->next;
Q->front->next = temp->next;
*x = temp->