卒的遍历,马的遍历
Problem Detail - 【基础】卒的遍历 - 追梦算法网
就是从左上到右下,只能向左向下走,输出可以走到的所有的路径
#include<iostream> using namespace std; int n,m; int sum; struct data{ int p,q; }a[110];//代表每次步骤的坐标记录下来 int g[100][110]; int dx[2]={1,0}; int dy[2]={0,1}; void dfs(int x,int y,int u) { if(x==n&&y==m) { a[u].p=x; a[u].q=y; sum++; cout<<sum<<":"<<a[1].p<<","<<a[1].q; for(int i=2;i<=u;i++) cout<<"->"<<a[i].p<<","<<a[i].q; cout<<endl; return ; } a[u].p=x; a[u].q=y; g[x][y]=1; for(int i=0;i<2;i++) { int xx=x+dx[i],yy=y+dy[i]; if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&!g[xx][yy]) { dfs(xx,yy,u+1); g[x][y]=0; } } } int main(){ cin>>n>>m; dfs(1,1,1); return 0; } /* dfs要记录路径 每次搜索的深度,也就是每个步骤上,每次到达什么地方 */
Problem Detail - 【提高】马的遍历 - 追梦算法网
这个跟上一题基本上不变...
#include<iostream> using namespace std; int n,m,sum; struct data{ int p,q; }a[110]; int dx[4]={2,1,-1,-2}; int dy[4]={1,2,2,1}; int g[110][110]; void dfs(int x,int y,int u) { if(x==4&&y==8) { a[u].p=x; a[u].q=y; sum++; cout<<sum<<":"<<a[1].p<<","<<a[1].q; for(int i=2;i<=u;i++) cout<<"->"<<a[i].p<<","<<a[i].q; cout<<endl; return ; } a[u].p=x; a[u].q=y; g[x][y]=1; for(int i=0;i<4;i++) { int xx=x+dx[i],yy=y+dy[i]; if(xx>=0&&yy>=0&&xx<=4&&yy<=8&&!g[xx][yy]) { dfs(xx,yy,u+1); g[x][y]=0; } } } int main(){ dfs(0,0,1); return 0; } /* bfs是一层层开始扫荡 dfs是一条道走到黑 求方案数,走完了一条返回接着走 dfs的参数一定要确定好 */
浙公网安备 33010602011771号