一、图的存储结构
1.1 邻接矩阵
1.2 邻接表
1.3 十字链表
二、广度优先搜索树( BFS)
2.1 定义
2.2 C实现
伪码:
把start节点push入队列;
while(队列不为空) {
把队列首节点pop出队列;
对节点进行相关处理或者判断;
while(此节点有下一个相关节点){
把相关节点push入对列;
}
}
q.push(head);
while(!q.empty())
{
temp=q.front();
q.pop();
if(tempÎ为目标状态)
输出或记录
if(temp不合法 )
continue;
if(temp合法)
q.push(temp+¦Δ );
}
2.3 性能分析
2.4 BFS算法应用
2.5 广度优先生成树
三、深度优先搜索树( DFS)
3.1 定义
-
BFS和DFS算法原理(通俗易懂版)
概念:
顾名思义,这种遍历方法是以深度为优先进行对图的搜索或者遍历,至于什么是以深度为优先条件,先看下面DFS的基本步骤:( 这是一个递归思想的DFS)
DFS:从当前节点开始,先标记当前节点,再寻找与当前节点相邻,且未标记过的节点:
(1): 当前节点不存在下一个节点,则返回前一个节点进行DFS
(2): 当前节点存在下一个节点,则从下一个节点进行DFS
3.1 C实现
伪码:
find(节点){
if(此结点已经遍历 || 此节点在图外 || 节点不满足要求) return;
if(找到了end节点) 输出结果 ; return;
标记此节点,表示已经遍历过了;
while(存在下一个相邻节点) find(下一个节点);
}
void dfs(状态A)
{
if(A不合法)
return;
if(A为目标状态)
输出或记录路径
if(A不为目标状态)
dfs(A+Δ )
}