图搜索基础
来源:互联网 发布:thinkphp开发cms 编辑:程序博客网 时间:2024/06/05 19:51
递归框架
int robbot(int x,int y) //机器人的输入
if(边界条件) //什么时候不用造了(自己就能造完)
return 0;
int a=robbot(x1,y1); //造一个小的自己帮忙干活
int b=robbot(x2,y2); //再造一个小的自己帮忙干活
return a+b; //自己要做的就是把别人的成果组转起来
比如有一道求子集的算法题,输入一组数组的数据,输出他们的子集。
#include<iostream> using namespace std; int nums[]={1,2,3}; bool visit[10000]; void print(){ for(int i=0;i<sizeof(nums)/sizeof(int);++i){ if(visit[i]) cout<<nums[i]<<" "; } cout<<endl; } void robbot(int idx,int nums[]){ if(idx>sizeof(nums)/sizeof(int)){ print(); return ; } visit[idx]=true;; robbot(idx+1,nums); visit[idx]=false; robbot(idx+1,nums); } int main(){ robbot(0,nums); return 0; }
输出:
1 2 3
1 2
1 3
1
2 3
2
3
最后一行为空。
深度优先搜索:伪代码void DFS(int v) visited[v]=true; for(v的每一个邻接点) if(!visted[w]) //如果没被访问过 DFS(w)
Q-queen
#include<iostream>using namespace std;#define num 4int path[100];bool hang[100],zheng[100],fan[100]; void print(int n){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==path[j]){ cout<<"Q"; }else{ cout<<"."; } }cout<<endl; } cout<<endl<<endl;}void DFS(int idx,int n){ if(idx>=n){ print(n); return ; } for(int i=0;i<n;++i){ if(!hang[i]&&!zheng[idx+i]&&!fan[idx-i+n-1]){ path[idx]=i; hang[i]=true; zheng[idx+i]=true; fan[idx-i+n-1]=true; DFS(idx+1,n); hang[i]=false; zheng[idx+i]=false; fan[idx-i+n-1]=false; } }}int main(){ DFS(0,num); return 0;}
骑士游历问题
在国际象棋中,马走日,问骑士从棋盘的左下角出发,能够不重复的遍历完整个棋盘。下面的代码框架和上面的N皇后问题完全一样。
int fx = {1,1,-1,-1,2,2,-2,-2};int fy = {2,-2,2,-2,1,-1,1,-1}; // fx,fy 数组记录骑士的规则void DFS(int xi,int yi,int n){ if(idx>=n){ print(n); return ; } for(int i=0;i<8;++i){ int newx=xi+fx[i]; int newy=yi+fy[i]; if(!visit[newx][newy]){ visit[newx][newy]=true; DFS(idx+1,n); visit[newx][newy]=false; } }}
阅读全文
0 0
- 图搜索基础
- 基础搜索
- 图的基础算法-广度优先搜索/深度优先搜索
- linux搜索命令基础(有图)
- 【基础算法】搜索-二分搜索
- 搜索算法基础
- 基础...二分搜索
- POJ1010-搜索题基础
- hdu1312基础的搜索
- 【基础搜索】Star星海
- 搜索 基础 AC
- 搜索基础代码。
- Android基础搜索框架
- A*启发式搜索基础
- DFS搜索基础题
- 2016搜索基础21015
- DFS BFS 搜索基础
- 简单搜索(基础)
- windows修改pip源
- iOS 简易图片无线轮播器的打造
- jQuery 与 Zepto 的区别
- 如何关闭运行在某端口的的进程,例如 :8080端口
- PAT (Basic Level) Practise (中文)1039. 到底买不买(20)
- 图搜索基础
- 度量学习 (Metric Learning)
- C++实现String类
- win8.1cmd常用命令提示符
- 访问网站时后一个页面被前一个页面阻塞、后台页面阻塞前台页面的解决
- ftp上传图片为空,不为空打开没法查看
- iterable,iterator和sequence
- VS C工程二【打开VC6++工程:错误1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏】
- Vim技巧