DFS:
深度优先搜索从最开始的状态出发,遍历所有可以达到的状态。由此可以对所有的状态进行操作或者列出所有的状态。
模板:
//建立搜索区间
char map[][];
void dfs(int x,int y)
{
//对此节点的操作
//根据题目要求判断其他点
for(int i = ; i < ; i++)
if(符合条件)
dfs();
return ;
}
BFS:
宽度优先搜索也是搜索的手段之一,深度优先搜索利用了栈进行计算,而宽度优先搜索则利用了队列。搜索时首先将初始状态添加到队列里,此后从队列的最前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,如此往复,直至队列被取空或者找到了问题的解。
模板:
//建立搜索区,一维/二维/三维 根据题目需要
int map[];
//访问数组
int vis[];
//搜索节点,结构体里的变量根据题目要求建立
struct node
{
int x,step;
};
//判断该节点是否符合条件
int check(node x)
{
if()//符合
return 1;
return 0;
}
int bfs(int s,int e)
{
memset(vis,0,sizeof(vis));//访问数组初始化
queue <node> p;//建立队列
//队列初始化,即把初值压入队列并标记
node st;
st.x = s;
st.step = 0;
vis[st.x] = 1;
p.push(st);
//循环队列判断
while(!p.empty())
{
//依次取出队列元素直至空
node now = p.front();
p.pop;
//判断是否符合结束条件
if(st.x = e)
return ;
//判断是否符合加入队列的条件
node next = now;
//根据题目要求改变相应的值
if(check(now.x))
{
//若满足条件,更新节点,标记,加入队列
}
}
return -1;
}