图的深度优先搜索
程序员文章站
2022-06-11 11:19:47
...
图的深度优先搜索与广度优先搜索相对应,其思想是先在一条路径上走到终点,然后再回过头走其他路径。如果图中有n个节点,e条边,那么用邻接表存储的图的时间复杂度为O(n+e),用邻接矩阵存储的图的遍历时间复杂度为O(n^2)。
这里实现了用邻接表存储的图的深度优先搜索:
void DFS()
{
size_t size = _v.size();
if(size < 1)
return;
vector<bool> flags;
flags.resize(size, false);
for(size_t i = 0; i < size; i++)
if(false == flags[i])
_DFS(&_map[i], flags);
cout << endl;
}
void _DFS(PNode pCur, vector<bool>& flags)
{
if(true == flags[pCur->_value])
return;
cout << _v[pCur->_value] << " ";
flags[pCur->_value] = true;
while(pCur->_Next)
{
if(false == flags[pCur->_Next->_value])
_DFS(&_map[pCur->_Next->_value], flags);
pCur = pCur->_Next;
}
}
建立一个无向图:
void test()
{
Map<char, false> m("ABCDEFG");
m.InsertEdge('A', 'B', 3);
m.InsertEdge('A', 'D', 5);
m.InsertEdge('C', 'B', 3);
m.InsertEdge('C', 'G', 4);
m.InsertEdge('D', 'F', 1);
m.InsertEdge('G', 'E', 6);
m.InsertEdge('F', 'C', 7);
m.PrintMap();
m.DFS();
}
遍历效果: