一 深度優先遍歷,參考前面DFS(white and gray and black)ios
二 根據定點以及邊數目進行判斷算法
若是m(edge)大於n(vertex),那麼確定存在環oop
算法以下:spa
1 刪除全部入度小於等於1的頂點, 而且將和這些頂點相關的頂點入度減1code
2 將入度變爲1的頂點所有刪除,重複上述動做,若是最後還有頂點那麼圖中存在環blog
具體代碼以下:ip
#include <iostream> using namespace std; #define MAX_VERTEX_NUM 128 enum color{WHITE, GRAY = 1, BLACK}; bool M[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int colour[MAX_VERTEX_NUM]; int dfsNum[MAX_VERTEX_NUM], num; int indegree[MAX_VERTEX_NUM]; int vexnum, edgenum; void init_graph(){ cout<<"enter vertex number:"<<endl; cin>>vexnum; cout<<"enter edge number:"<<endl; cin>>edgenum; int i, j; while(edgenum){ cout<<"add new edge:"<<endl; cin>>i>>j; M[i - 1][j - 1] = true; //initialize in vertex degree indegree[i - 1]++; indegree[j - 1]++; edgenum--; } } /* void dfs(int u, int p){ colour[u] = GRAY; dfsNum[u] = num++; for( int v = 0; v < vexnum; v++){ if(M[u][v] && v != p){ if(colour[v] == WHITE) dfs(v, u); else if(colour[v] == GRAY) cout<<"back edge between"<<u + 1<<" and"<<v + 1<<endl; else if(colour[v] == BLACK) cout<<"cross edge between"<<u + 1<<" and"<<v + 1<<endl;; } } colour[u] = BLACK; } void print_dfs_num(){ for(int v = 0; v < vexnum; v++) cout<<dfsNum[v]<<" "; } */ void LoopJudge(){ bool loop = false; int twice = 2; int k, i, j; cout<<"line: "<<__LINE__<<endl; for( k = twice; k > 0; k--){ cout<<"line: "<<__LINE__<<"k: "<<k<<endl; for( i = 0; i < vexnum; i++){ cout<<"line: "<<__LINE__<<"i: "<<i<<endl; if(indegree[i] <= 1){ indegree[i] = 0; //delete vertex in degree equal one for( j = 0; j < vexnum; j++){ cout<<"line: "<<__LINE__<<"j: "<<j<<endl; if(M[i][j]){ M[i][j] = false; M[j][i] = false; indegree[j]--; }//if(M[i][j]) }//for(int j = 0; j < vexnum; j++) }//if(indegree[i] <= 1) }//for(int i = 0; i < vexnum; i++) } for( k = 0; k < vexnum; k++){ if(indegree[k] != 0){ loop = true; } } if(loop) cout<<"There is loop in undirected graph!"<<endl; else cout<<"There is no loop in undirected graph!"<<endl; } int main() { init_graph(); //dfs(0, -1); //print_dfs_num(); LoopJudge(); int ch; cin>>ch; return 0; }
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。ci