为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

有向图的强连通分量

2018-02-13 9页 doc 23KB 17阅读

用户头像

is_196623

暂无简介

举报
有向图的强连通分量有向图的强连通分量 #include #include using namespace std; #define MAX_VERTEX_NUM 20 typedef struct ArcBox{ int tailvex,headvex; //该弧的尾和头顶点的位置 struct ArcBox *hlink,*tlink; //分别为弧头相同和弧尾相同的弧的链域 // InfoType *info; //该弧相关信息的指针 }ArcBox; typedef struct VexNode{ int data; ...
有向图的强连通分量
有向图的强连通分量 #include #include using namespace std; #define MAX_VERTEX_NUM 20 typedef struct ArcBox{ int tailvex,headvex; //该弧的尾和头顶点的位置 struct ArcBox *hlink,*tlink; //分别为弧头相同和弧尾相同的弧的链域 // InfoType *info; //该弧相关信息的指针 }ArcBox; typedef struct VexNode{ int data; ArcBox *firstin,*firstout; //分别指向该顶点第一条入弧和出弧 }VexNode; typedef struct{ VexNode xlist[MAX_VERTEX_NUM]; //头向量 int vexnum,arcnum; //有向图的当前顶点数和弧数 }OLGraph; int CreateDG(OLGraph& G){ cout<<"请输入顶点个数和弧数:"; cin>>G.vexnum>>G.arcnum; int i=0; for( i=0; i>v1>>v2; ArcBox *current=G.xlist[v1-1].firstout; ArcBox *p=G.xlist[v1-1].firstout; if(current==NULL){ G.xlist[v1-1].firstout=new ArcBox; G.xlist[v1-1].firstout->headvex=v1-1; G.xlist[v1-1].firstout->tailvex=v2-1; G.xlist[v1-1].firstout->hlink=G.xlist[v1-1].firstout->tlink=NULL; p=G.xlist[v1-1].firstout; } else{ p=current; while(current!=NULL){ p=current; current=current->tlink; } current=new ArcBox; current->headvex=v1-1; current->tailvex=v2-1; current->hlink=current->tlink=NULL; p->tlink=current; p=p->tlink; } current=G.xlist[v2-1].firstin; if(current==NULL){ G.xlist[v2-1].firstin=p; } else{ while(current->hlink!=NULL){ current=current->hlink; } current->hlink=p; } } return 1; } bool visited[MAX_VERTEX_NUM]={false}; bool unvisited[MAX_VERTEX_NUM]={false}; vector numberlist; vector set; int GetFirst(OLGraph& G,int i){ if(G.xlist[i].firstout==NULL) return -1; else{ return G.xlist[i].firstout->tailvex; } } int GetNext(OLGraph& G,int i,int j){ ArcBox* pcurrent=G.xlist[i].firstout; while(pcurrent!=NULL){ if(pcurrent->tailvex==j){ break; } pcurrent=pcurrent->tlink; } if(pcurrent!=NULL && pcurrent->tlink!=NULL){ return pcurrent->tlink->tailvex; } return -1; } void DFS(OLGraph& G,int i){ visited[i]=true; cout<=0; j=GetNext(G,i,j)){ if(!visited[j]){ DFS(G,j); } } numberlist.push_back(i); } void DFSTraverse(OLGraph& G){ for(int i=0; iheadvex; } } int GetNext1(OLGraph& G,int i,int j){ ArcBox* pcurrent=G.xlist[i].firstin; while(pcurrent!=NULL){ if(pcurrent->headvex==j){ break; } pcurrent=pcurrent->hlink; } if(pcurrent!=NULL && pcurrent->hlink!=NULL){ return pcurrent->hlink->headvex; } return -1; } void DFS1(OLGraph& G,int i){ set.push_back(i+1); unvisited[i]=true; for(int j=GetFirst1(G,i); j>=0; j=GetNext1(G,i,j)){ if(!unvisited[j]){ DFS1(G,j); } } } void DFSTraverse1(OLGraph& G){ int k; for(int i=numberlist.size()-1; i>=0; i--){ int j=numberlist[i]; if(!unvisited[j]){ if(!set.empty()){ cout<<"连通分量为:"<tailvex<<" "; current=current->tlink; } } cout<tlink; delete p; p=q; } } } return 1; }
/
本文档为【有向图的强连通分量】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索