数据结构图基本算代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构图基本算代码
————————————————————————————————作者:————————————————————————————————日期:
#include"iostream"
#include"LGraph.h"
#include"seqqueue.h"
#include"MGraph.h"
#define INFTY 1000
template
struct ENode
{
ENode()
{nextArc=NULL;}
ENode(int vertex,T weight,ENode *next)
{
adjVex=vertex;
w=weight;
nextArc=next;
}
int adjVex;
T w;
ENode* nextArc;
};
template
class ExtLGraph:public LGraph
{
public:
ExtLGraph(int mSize):LGraph
void BFS();
void TopoSort(int *order);
private:
void CalInDegree(int *InDegree);
void DFS(int v,bool *visited);
void BFS(int v,bool *visited);
};
template
void ExtLGraph
{
bool *visited=new bool[n];
for(int i=0;i visited[i]=false; for(i=0;i if(!visited[i]) DFS(i,visited); delete []visited; } template void ExtLGraph { visited[v]=true; cout<<" "< for(ENode if(!visited[t->adjVex]) DFS(t->adjVex,visited); } template void ExtLGraph { bool *visited=new bool[n]; for(int i=0;i visited[i]=false; for(i=0;i if(!visited[i]) BFS(i,visited); delete []visited; } template void ExtLGraph { SeqQueue visited[v]=true; cout<<" "< q.EnQueue(v); while(!q.IsEmpty()) { q.Front(v); q.DeQueue(); for(ENode if(!visited[t->adjVex]){ visited[t->adjVex]=true; cout<<" "< } q.EnQueue(t->adjVex); } } template void ExtLGraph for(int i=0;i InDegree[i]=0; for(i=0;i for(ENode InDegree[p->adjVex]++; } template void ExtLGraph { int *InDegree=new int[n]; int i,j,k,top=-1; CalInDegree(InDegree); for(i=0;i if(!InDegree[i]) { InDegree[i]=top; top=i; } for(i=0;i { if(top==-1) { cout<<"Has cycle!"< return; } else { j=top; top=InDegree[top]; order[i]=j; cout< for(ENode k=p->adjVex; InDegree[k]--; if(!InDegree[k]){ InDegree[k]=top; top=k; } } } } }