数据结构图基本算代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(mSize){} void DFS();

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::DFS()

{

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::DFS(int v,bool *visited)

{

visited[v]=true;

cout<<" "<

for(ENode *t=a[v];t;t=t->nextArc)

if(!visited[t->adjVex])

DFS(t->adjVex,visited);

}

template

void ExtLGraph::BFS()

{

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::BFS(int v,bool *visited)

{

SeqQueueq(Vertices());

visited[v]=true;

cout<<" "<

q.EnQueue(v);

while(!q.IsEmpty())

{

q.Front(v);

q.DeQueue();

for(ENode *t=a[v];t;t=t->nextArc)

if(!visited[t->adjVex]){

visited[t->adjVex]=true;

cout<<" "<adjVex;

}

q.EnQueue(t->adjVex);

}

}

template

void ExtLGraph::CalInDegree(int *InDegree) //计算所有顶点的入度

for(int i=0;i

InDegree[i]=0;

for(i=0;i

for(ENode* p=a[i];p;p=p->nextArc)

InDegree[p->adjVex]++;

}

template

void ExtLGraph::TopoSort(int *order)

{

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* p=a[j];p;p=p->nextArc){

k=p->adjVex;

InDegree[k]--;

if(!InDegree[k]){

InDegree[k]=top;

top=k;

}

}

}

}

}

相关文档
最新文档