DFS(深度优先搜索)
引入:为什么要搜索解决问题?
因为很多问题并不可以直接计算出结果,需要遍历所有情况才能发找到最优解或者可行解。
深度优先搜索:
采用递归的方法,先沿一条路搜到底,在递归回上一个节点,沿另一个方向搜索,以此类推。
类似于树的先根遍历;
思想:一直往深处走,直到找到解或者走不下去为止
模板:
int MAXN=0;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
bool can_move(int x,int y)
{
if(...) //越界情况
return false;
if(...) //非法情况
return false;
return true;
}
void dfs(int x,int y,int ans)
{
if(x==ex&&y=ey)
{
MAXN=max(MAXN,ans);
}
visit[x][y]=1;
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(ca