前面学长讲了dfs和bfs,但我上选修没在,昨天又有一位学长给我们复盘了dfs
dfs深度优先搜索
1.一条路走到黑
2.最重要是每次dfs自己的位置
3dfs每次都要还原自己的位置
void dfs(int x,int y,int step)
{
int next[4][2]={
{0,1},{1,0},{0,-1},{-1,0}//方向
};
int tx,ty,k;
if(x==4&&y==4)//出口,当找到
{
if(min1>step)min1=step;//最短路径
return;
}
for(int k=0;k<4;k++)//循环该位置上下左右
{
tx=x+next[k][0];
ty=y+next[k][1];
if(tx<0||tx>4||ty<0||ty>4)//位置出界
continue;//找下个位置
if(a[tx][ty]==0&&book[tx][ty]==0)//该位置没有障碍物且没走过
{
book[tx][ty]=1;//标记已经走过
dfs(tx,ty,step+1);//走下一步
book[tx][ty]=0;//标记清除
}
}
return;
}
dfs时间复杂度比较高,还可以进行剪枝
明天学一下bfs,广度优先