判斷無向圖是否是樹
阿新 • • 發佈:2017-09-01
數據結構 edge lis ret ems visit cnblogs null light
一個無向圖G是一顆樹的條件:
G必須是無回路的連通圖或者是n-1條邊的連通圖
思路: 如果能通過一次dfs就能夠訪問圖中所有頂點, 並且訪問的邊是n-1條則此圖是一個棵樹
void dfs(ALGraph graph, int v, bool visit[], int &vnum, int &arcnum) { visit[v] = true; vnum++; for(ArcNode* edge = graph.adjList[v].first; edge != NULL; edge = edge->next) { if(!visit[edge->adjvex]) { arcnum++; dfs(graph, edge->adjvex, visit, vnum, arcnum); } } } /* 一個無向圖G是一顆樹的條件: G必須是無回路的連通圖或者是n-1條邊的連通圖 */ bool isTree(ALGraph graph) { bool visit[MAX_NUM]; memset(visit, 0, sizeof(visit)); int vnum = 0, arcnum = 0;//訪問過頂點的個數,邊的條數 dfs(graph, 1, visit, vnum, arcnum); if(vnum == graph.vexnum && arcnum == graph.vexnum - 1) return true; return false; }
參考: 王道考研數據結構復習指導
判斷無向圖是否是樹