面试题常见算法之图的广度优先搜索和深度优先搜索
2017-05-20 19:59
260 查看
类似于二叉树的广度优先搜索和深度优先搜索,代码如下:
void DFS(Node root) //非递归实现
{
stack<Node> s;
root.visited = true;
printf("%d ", root.val); //访问
s.push(root); //入栈
while (!s.empty())
{
Node pre= s.top(); //取栈顶顶点
int j;
for (j = 0; j<pre.adjacent.size(); j++) //访问与顶点i相邻的顶点
{
Node cur = pre.adjacent[j];
if (cur.visited == false)
{
printf("%d ", cur.val); //访问
cur.visited = true;
s.push(cur); //访问完后入栈
break; //找到一个相邻未访问的顶点,访问之后则跳出循环
}
}
//对于节点4,找完所有节点发现都已访问过或者没有临边,所以j此时=节点总数,然后把这个4给弹出来
//直到弹出1,之前的深度搜索的值都已弹出,有半部分还没有遍历,开始遍历有半部分
if (j == pre.adjacent.size()) //如果与i相邻的顶点都被访问过,则将顶点i出栈
s.pop();
}
}
void BFS(Node root) {
queue<Node> q;
root.visited = true;
printf("%d ", root.val); //访问
q.push(root); //入栈
while (!q.empty()) {
Node pre = q.front();
q.pop();
for (Node cur : pre.adjacent) {
if (cur.visited == false) {
printf("%d ", cur.val); //访问
cur.visited = true;
q.push(cur);
}
}
}
}
void DFS(Node root) //非递归实现
{
stack<Node> s;
root.visited = true;
printf("%d ", root.val); //访问
s.push(root); //入栈
while (!s.empty())
{
Node pre= s.top(); //取栈顶顶点
int j;
for (j = 0; j<pre.adjacent.size(); j++) //访问与顶点i相邻的顶点
{
Node cur = pre.adjacent[j];
if (cur.visited == false)
{
printf("%d ", cur.val); //访问
cur.visited = true;
s.push(cur); //访问完后入栈
break; //找到一个相邻未访问的顶点,访问之后则跳出循环
}
}
//对于节点4,找完所有节点发现都已访问过或者没有临边,所以j此时=节点总数,然后把这个4给弹出来
//直到弹出1,之前的深度搜索的值都已弹出,有半部分还没有遍历,开始遍历有半部分
if (j == pre.adjacent.size()) //如果与i相邻的顶点都被访问过,则将顶点i出栈
s.pop();
}
}
void BFS(Node root) {
queue<Node> q;
root.visited = true;
printf("%d ", root.val); //访问
q.push(root); //入栈
while (!q.empty()) {
Node pre = q.front();
q.pop();
for (Node cur : pre.adjacent) {
if (cur.visited == false) {
printf("%d ", cur.val); //访问
cur.visited = true;
q.push(cur);
}
}
}
}
相关文章推荐
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 图算法-深度优先搜索和广度优先搜索
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 算法导论-图的搜索算法之深度优先搜索和广度优先搜索
- 【算法——02】图的遍历——BFS广度优先搜索、DFS深度优先搜索
- 算法之深度优先搜索和广度优先搜索
- 图的基本算法——广度优先搜索和深度优先搜索
- AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- 【算法学习】二、深度优先搜索与广度优先搜索
- 【游戏编程】AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- 图搜索之A*算法、深度优先搜索和广度优先搜索
- 深度优先搜索和广度优先搜索
- 图的遍历之 深度优先搜索和广度优先搜索
- 某研究院的二叉树深度优先遍历变种的算法面试题以及答案
- 深度优先搜索与广度优先搜索
- 深度优先搜索和广度优先搜索
- 【游戏编程】AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- 【算法研究】搜索算法-深度优先搜索
- 深度优先搜索、广度优先搜索(java)
- 算法起步之深度优先搜索