用邻接表表示的图的转置算法,比较简单。
#include <iostream>
using namespace std;
#define N 8
#define INFINITE 0x7fffffff
#define WHITE 1
#define GRAY 2
#define BLACK 3
//顶点结点结构
struct Vertex
{
Vertex * next;/*指向下一个顶点*/
int id;/*节点的标志*/
Vertex():next(NULL),id(0){}
};
//图结构
struct Graph
{
Vertex *Adj[N+1];//N个顶点及邻接点头指针
int color[N+1];//颜色
int p[N+1];//指向遍历树节点的父结点
int d[N+1];/*节点发现时间*/
int f[N+1];/*节点结束遍历时间*/
Graph()
{
for(int i = 1; i <= N; i++)
{
Adj[i] = new Vertex;
color[i]=WHITE;
d[i] = 0;
f[i] = 0;
p[i] = 0;
}
}
~Graph()
{
for(int i = 1; i <= N; i++)
delete Adj[i];
}
};
void Print(Graph *g);
bool Init(Graph *g);
bool InsertEdge(Graph *g , int start,int end);
void PaintColor(Graph *g,int vertex,int color);
void DepthFirstVisit(Graph *g,int vertex,int& v_t