private void Dfs(int current) { _isVisisted[current] = true; var allVertex = _graph.GetAdjacentVertexes(current); for (int j = 0; j < allVertex.Count; j++) { if (!_isVisisted[allVertex[j]]) { _from[allVertex[j]] = current; //记录当前要访问的结点是从哪来的 Dfs(allVertex[j]); } } }
//递归的实现 // private void Bfs(int current) // { // _isVisited[current] = true; // var adjacentVertexes = _graph.GetAdjacentVertexes(current); // adjacentVertexes.ForEach(x=>{ // if (!_isVisited[x] && !_gQueue.Contains(x)) // { // _from[x] = current; // _gQueue.Enqueue(x); // } // }); // while(_gQueue.Count != 0) // { // Bfs((int)_gQueue.Dequeue()); // } // } //非归递实现 private void Bfs(int start) { _gQueue.Enqueue(start); while (_gQueue.Count != 0) { var current = (int)_gQueue.Dequeue(); _isVisited[current] = true; var adjacentVertex = _graph.GetAdjacentVertexes(current); for (int i = 0; i < adjacentVertex.Count; i++) { var child = adjacentVertex[i]; if (!_isVisited[child] && !_gQueue.Contains(child)) { _gQueue.Enqueue(child); _from[child] = current; _steps[child] = _steps[current] + 1; } } } }