DFS深度优先搜索
来源:互联网 发布:自动门机组 淘宝 编辑:程序博客网 时间:2024/05/01 15:51
搜索算法的核心个人学习过程中总结有两个(求不喷):
1.有序的扩展
2.有效利用记录数组进行标记
经典案例:迷宫问题(0可走,1不可走,找最短路径)
#include"iostream"
#include"cstdio"
#define inf 9999999 //对mink进行初始化,便于进行最小的比较
using namespace std;
int map[55][55];
int book[55][55]; //注意全局变量在定义的时候自动进行初始化为0
int startx,starty;
int endx,endy;
int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; //枚举四个方向
int n,m;
int mink=inf;
void dfs(int startx,int starty,int step)
{
int dx,dy;
if(startx==endx&&starty==endy)
{
mink=min(mink,step);
}
else
{
for(int i=0;i<=3;i++)
{
dx=startx+next[i][0];
dy=starty+next[i][1];
if(dx<1||dx>n||dy<1||dy>m||map[dx][dy]==1)
{
continue;
}
else
{
if(book[dx][dy]==0&&map[dx][dy]==0)
{
book[dx][dy]=1;
dfs(dx,dy,step+1);
book[dx][dy]=0; //还原
}
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
}
}
cin>>startx>>starty>>endx>>endy;
book[startx][starty]=1;
dfs(startx,starty,0);
cout<<mink<<endl;
return 0;
}
注意有别于广度优先搜索,深度优先搜索是利用递归调用实现的
- 深度优先搜索 DFS
- 深度优先搜索 DFS
- DFS 深度优先搜索
- DFS 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- dfs深度优先搜索
- dfs 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- 深度优先搜索(DFS)
- 深度优先搜索--DFS
- BZOJ1046/HAOI2007上升序列
- bat 批处理入门学习_lesson01
- 如何写出优美的 C 代码
- CocoaPods详解之----制作篇
- tomcat性能调优
- DFS深度优先搜索
- 一个Testview上显示经纬度
- Hust oj 1992 比赛积分(01背包)
- [leetcode 259]3Sum Smaller
- css初始化
- 几组超神奇的网页应用代码要你在IE浏览器任意打开一个网站,然后在浏览器上输入如下代码神奇的代码,可随意修改复制页面内容!
- System Permissions --1.4
- 浅谈 MVP in Android
- 【杭电】[1022]Train Problem I