64,639
社区成员
发帖
与我相关
我的任务
分享
template<class T>
class Graph {
public:
int vertexNum;
int edgeNum;
int *Mark; //就是这里!****!!*******!!!
Graph(int verticesNum) {
vertexNum = verticesNum;
edgeNum = 0;
Mark = new int[vertexNum];
for (int i = 0; i < vertexNum; i++) {
Mark[i] = UNVISITED;
}
}
~Graph() {
delete[] Mark;
//delete[] Indegree;
}
virtual Edge<T> FirstEdge(int oneEdge) = 0;
virtual Edge<T> NextEdge(Edge<T> oneEdge) = 0;
static int VerticesNum() { return vertexNum; }
static int EdgesNum() { return edgeNum; }
bool IsEdge(Edge<T> oneEdge) {
if (oneEdge.weight > 0 && oneEdge.weight < INFINITY&&oneEdge.end >= 0)
return true;
else
return false;
}
static void visit(int v) { Mark[v] = VISITED; }
static int StartVertex(Edge<T> oneEdge) { return oneEdge.start; }
static int EndVertex(Edge<T> oneEdge) { return oneEdge.end; }
T Weight(Edge<T> oneEdge) { return oneEdge.weight; }
virtual void setEdge(int start, int end, int weight) = 0;
virtual void delEdge(int start, int end) = 0;
void DFS(int v);
void DFSTraverse();
void BFS(int v);
void BFSTraverse();
};
template<class T>
void Graph<T>::DFS(int v) {
Mark[v] = VISITED;
visit(v);
for (Edge<T> e = FirstEdge(v); IsEdge(e); e = NextEdge(e)) {
if (Mark[EndVertex(e)] == UNVISITED)
DFS(EndVertex(e));
}
}
static void visit(int v) { Mark[v] = VISITED; }
改成:
void visit(int v) { Mark[v] = VISITED; }