深度优先搜索
来源:互联网 发布:linux查看当前用户命令 编辑:程序博客网 时间:2024/06/15 19:34
深度优先搜索就是有多远就走多远,能滚到哪就滚到哪
这个思想是从头访问一个点,输出这个点,然后把这个点标记为已读,找到与他相连的任意一个点,再次进行此操作,递归
挺好理解的哈
给个例子:
伪代码:
int flag = 0; // 这个就是标记量,标记有多少个已经走过了,如果这个flag == 总共的点数,那么就代表程序输出结束了
对象 point //每个点是一个对象,属性有连接的点的数组,一个int a变量标记是否已经走过, 0代表没走过,1代表走过
先来一个递归的,直接写的,不确定对不对啊,大体思路绝对没问题的,反正也是伪代码啊
deep (point p)
{
if(flag == 总共的点数)
{
//ok了,可以退出函数了
}
if(p.a == 0)
{
System.out.print(p);
p.a = 1;
flag ++;
deep(一个连接他的点);
}
else
{
deep(返回上一个点);
}
}
//这个程序在if的deep递归的时候中还需要一个操作,不能每次都递归那个连接点数组中的第一个,你每次都deep第一个那后面的能愿意吗?是吧,这个怎么做没写,因为有很多种方法,比如,每次先取出第一个,然后在数组中删除等
//还有一个就是怎么找到上一个点,这个随便写,也不说了
再写一个循环的
while (true)
{
if(flag == 总共的点数)
{
break;
}
if(p.a == 0)
{
System.out.print(p);
flag++;
p.a = 下一个连接的点 ;
}
else
{
p.a = 上一个点;
}
}
这个跟递归差不多,当然问题也差不多。。。
void DFS(ALGraph G,int v){ //图G为邻接表类型
cout<<v; visited[v] = true; //访问第v个顶点
p= G.vertices[v].firstarc; //p指向v的边链表的第一个边结点
while(p!=NULL){ //边结点非空
w=p->adjvex; //表示w是v的邻接点
if(!visited[w]) DFS(G,w); //如果w未访问,则递归调用DFS
p=p->nextarc; //p指向下一个边结点
}
}
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索 DFS
- 深度优先搜索遍历
- 深度优先搜索 DFS
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- hdoj1015Safecracker(深度优先搜索)
- [AI]深度优先搜索
- 深度优先搜索算法
- DFS 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- 图解深度优先搜索
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- linux下将自己写的shell脚本做成系统命令
- POJ 1961 Period(KMP最小循环节)
- AsyncTask分析
- 使用移动版AWS控制台管理资源
- android lcd驱动简析
- 深度优先搜索
- 关于R画误差分析图——做到和MATLAB一样
- Javaweb监听器
- 1-n中数字1的个数
- celery实现任务统一收集、分发执行
- jeecms内容标签基类
- JS初级学习笔记(1)
- 通过http user-agent判断是否为手机浏览器
- redis技术之旅七