BFS – 广度优先遍历 一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。形象一点如下: 总的来说,就是先遍历离根节点近的,一层一层的。 程序思路 函数传入需要遍历的树/图的根节点,然后将根节点放入队列,开始循环操作,只要队不是空的,就取队首并且将队首元素所连接的点放入队中。 要注意的是,图中可能出现环,可能会陷入死循环,所以要定义一个数组记录节点是否被访问过。 实现方法 – 存储方式为点对点 广度优先遍历,参数v是开始遍历的点

Read More

点对点 建立一个数组,用下标表示不同的点,用其内容表示这个点所连接的点。例如数组名为graph,然后可以用graph[0] = 1表示0点可以通向1点。 其中,如果一个点可以连向多个点,可以使用二维数组存储,例如graph[0][0] = 1和graph[0][1] = 2表示0点所连接的点有1点和2点。通常,这个二维数组的第二维不会被填满,所以,可以使用向量作为第二维,像下面一样: #include <vector> using namespace std; const int M

Read More

用于一些特殊的类进行遍历访问所用,类似于一个指针。 以下使用vector[向量]进行举例: 如何建立一个迭代器: list<int>::iterator it; 常用操作,迭代器进行遍历: for(it = l.begin(); it != l.end(); it++) 其中,l是一个list类型的变量,首先迭代器等于l的首地址然后自加到l的尾地址 PS:在大部分STL中, 尾地址是指向了一个空的元素,所以用!= 对迭代器进行访问: print(%d, *it); 这表示输出list

Read More