还是直接从QQ空间把代码直接迁过来
#include
using namespace std;
#define UNVISITED 0;
#define VISITED 1;
class Edge
{
public:
int start,end;
int weight;
Edge()
{
start=end=weight=0;
}
Edge(int st,int en,int w)
{
start=st;
end=en;
weight=w;
}
bool operator > (Edge oneEdge)
{
if(weight>oneEdge.weight)
return true;
else
return false;
}
bool operator < (Edge oneEdge)
{
if(weight
0 && oneEdge.end>=0)
return true;
else
return false;
}
int StartVertex(Edge oneEdge) //返回oneEdge的始点
{
return oneEdge.start;
}
int EndVertex (Edge oneEdge)
{
return oneEdge.end;
}
int Weight(Edge oneEdge)
{
return oneEdge.weight;
}
virtual void setEdge(int start,int end,int weight)=0;
virtual void delEdge(int start,int end)=0;
void DSF(int v)
{
Mark[v]=VISITED;
cout<
next;
delete tmp;
}
}
~EdgeList()
{
removeall();
}
};
class ListGraph: public Graph
{
private :
EdgeList *graList;//保存所有边表的数组
public :
ListGraph(int verticesNum):Graph(verticesNum)
{
graList=new EdgeList [vertexNum];
}
~ListGraph()
{
delete []graList;
}
Edge FirstEdge(int oneVertex)
{
Edge tmpEdge;
tmpEdge.start=oneVertex;
ListNode *temp=graList[oneVertex].head;
if(temp->next!=NULL)
{
tmpEdge.end=temp->next->element.vertex;
tmpEdge.weight=temp->next->element.weight;
}
return tmpEdge;
}
Edge NextEdge(Edge oneEdge)
{
//返回与边oneEdge有相同关联顶点的下一条边
Edge tmpEdge;
tmpEdge.start=oneEdge.start;
ListNode *temp=graList[oneEdge.start].head;
while(temp->next!=NULL && temp->next->element.vertex<=oneEdge.end)
temp=temp->next;
if(temp->next!=NULL)
{
tmpEdge.end=temp->next->element.vertex;
tmpEdge.weight=temp->next->element.weight;
}
return tmpEdge;
}
void setEdge(int start,int end,int weight)
{
ListNode *temp=graList[start].head;
while(temp->next!=NULL && temp->next->element.vertex
next;
if(temp->next==NULL)
{
temp->next=new ListNode;
temp->next->element.vertex=end;
temp->next->element.weight=weight;
edgeNum++;
return;
}
if(temp->next->element.vertex==end) //边在边表中已存在
{
temp->next->element.weight;
return;
}
if(temp->next->element.vertex>end) //边在边表中不存在,但在边表中其后存在其他边
//则在边表中插入这条边
{
ListNode *other=temp->next;
temp->next=new ListNode;
temp->next->element.vertex=end;
temp->next->element.vertex=end;
temp->next->next=other;
edgeNum++;
}
}
void delEdge(int start,int end)
{
ListNode *temp=graList[start].head;
while(temp->next!=NULL && temp->next->element.vertex
next; if(temp->next==NULL) //边不存在,不需要任何操作 return; if(temp->next->element.vertex==end) //边存在,将其删掉 { ListNode *other=temp->next->next; delete temp->next; temp->next=other; edgeNum--; } } }; void main() { ListGraph a(5); a.setEdge(4,1,5); a.setEdge(3,4,6); a.setEdge(1,3,9); a.setEdge(3,2,2); a.DSFTraverse(); }