代码如下:
Link_Graph.h文件:
/*--------------------------------------------
用邻接链表来表示图,并实现广度优先搜索算法
和深度优先搜索算法
--------------------------------------------*/
#ifndef LINK_GRAPH_H
#define LINK_GRAPH_H
#include <iostream>
#include <queue>
#include <limits.h>
using namespace std;
/*定义三种颜色*/
#define WHITE 0
#define GRAY 1
#define BLACK 2
/*--------------------------
定义邻接表结点
--------------------------*/
struct EdgeNode
{
int start; /*边的起点*/
int end; /*边的终点*/
int value; /*边的权重*/
EdgeNode *next;
EdgeNode(int s, int e, int v) :
start(s), end(e), value(v), next(NULL) { }
};
/*----------------------------
定义顶点表结点
----------------------------*/
struct VertexNode
{
int color;
int d, f;
int pi;
EdgeNode *FirstEdge;
VertexNode() :
FirstEdge(NULL), color(WHITE), d(INT_MAX), f(INT_MAX), pi(0) { }
};
/*---------------------
定义图为邻接链表
---------------------*/
class Graph
{
public:
int n;
VertexNode *V;
int Time;
Graph(int num) : n(num)
{
V = new VertexNode[n+1];
}
~Graph()
{
delete[] V;
}
void AddSingleEdge(int start, int end, int value);
void AddDoubleEdge(int start, int end, int value);
void DeleteSingleEdge(int start, int end);
void DeleteDoubleEdge(int start, int end);
void