运用DFS算法解决的图的相关算法应用
作者:互联网
/* 求无向图G的连通分量个数 dfs运用 */ void DFS(Graph G,int v){ ENode *p; visited[v]=true; visit(t); p=G->adjList[v].firstarc; while(p!=null){ if(visited[p->adjvex]==false){ DFS(G,p->adjvex); } p=p->nextarc; } } int ComnNum(Graph G){ int num=0; for(int i=0;i<G->vertices;i++){ visited[i]=false; } for(int i=0;i<G->vertices;i++){ if(visited[i]==false){ DFS(G,i); num++; } } }
/* 图G采用邻接表存储 设计一个算法判断图G是否是连通图 */ void DFS(Graph G,int v){ ENode *p; visited[v]=true; visit(v); p=G->adjList[v].firstarc; while(p!=null){ if(visited[p->adjvex]==false){ DFS(G,p->adjvex); } p=p->nextarc; } } bool IsConnect(Graph G){ bool flag=true; int visited[maxsize]; for(int i=0;i<g.Vertices;i++){ visited[i]=false; } DFS(G,0); for(int i=0;i<G->vertices;i++){ if(visited[i]==false){ flag=false; break; } } return flag; }
/* 判断有向图的邻接表中是否有Vi->Vj的路径 */ void DFS(Graph G,int v){ ENode *p; visited[v]=true; visit(t); p=G->adjList[v].firstarc; while(p!=null){ if(visited[p->adjvex]==false){ DFS(G,p->adjvex); } p=p->nextarc; } } bool visited[maxsize]; bool existPath(Graph G,int v,int j){ for(int i=0;i<G->vertices;i++){ visited[i]=false; } DFS(G,v); if(visited[j]==false){ return false; }else{ return true; } }
/* 设计一个函数concomx(),求用邻接表存储的无向图中 节点总数恰好为k 的连通分量个数 */ void DFS(Graph G,int v,bool &visited[],int &Vnum){ ENode *p; visited[v]=true; Vnum++; for(p=adjList[v]->firstarc;p;p=p->next){ if(visited[p->adjvex]==flase){ DFS(G,p->adjvex,visited,Vnum); } } } bool visited[maxsize]; int concomx(Graph G,int k){//结点个数 int count=0;//记录连通分量个数 int Vnum=0; for(int i=0;i<G.vertices;i++){ visited[i]=false; } for(int i=0;i<G.vertices;i++){ Vnum=0; if(visited[i]==false){ DFS(G,i,visited,Vnum); } if(Vnum==k) count++; } return count; }
/* 设计一个算法,判断一个无向图G是否为一棵树。 是树返回true 否则false 结论:用DFS 访问节点数为n 访问的边数为2(n-1) 如果是一棵树 访问边数为2(n-1) */ void DFS(Graph G,int v,int &Vnum,int &Enum){ ENode *pl visited[v]=true; Vnum++;// p=adjList[v].firstarc; while(p!=null){ Enum++;// if(visited[p->adjvex]==false){ DFS(G,p->adjvex,Vnum,Enum); } p=p->nextarc; } } bool IsTrre(Graph G){ int Vnum=0,Enum=0; for(int i=0;i<G.vertices;i++){ visited[i]=false; } DFS(G,1,Vnum,Enum); if(Vnum==g.vertices && Enum==2*(Vnum-1)){ return true; }else{ return false; } }
//无向图G用邻接矩阵G,给定顶点v0出发深度遍历图G, //并将产生的深度遍历生成树存在邻接矩阵B中 void DFS(Graph G,int b[][maxsize],int v){ visited[v]=true; for(int j=0;j<G.vertices;j++){ if(G.A[v][j]&&!visited[j]){ b[v][j]=1; DFS(g,j,b); } } } bool visited[maxsize]; void shengchengTree(Graph g,int b[][maxsize]){ for(int i=0;i<G.vertices;i++){ visited[i]=false; } for(int i=0;i<G.vertices;i++){ if(!visited[i]){ DFS(G,b,i); } } }
标签:false,int,Graph,adjvex,DFS,算法,visited,运用 来源: https://www.cnblogs.com/zzuuoo666/p/12101606.html