走迷宫,递归来判断
#include<iostream>
using namespace std;
int vis[20][20]; //标记点 记录走过的点
int n = 3, m = 3; //n,m代表终点
int ans; //ans代表可到达终点一共有多少种
//int dx[4] = {0, 1,0,-1}; //上右下左 代表前进方向 向右则加一 不动则为0 向左则减一
//int dy[4] = {-1, 0,1,0}; //上右下左 代表前进方向
int dx[2] = {0, 1};//下右 代表前进方向 向下则为0 向右则加一
int dy[2] = {1, 0};//下右 代表前进方向 向下则加1 向右则加0
void dfs(int x, int y) {
// cout << x << " " << y << endl;
if (x == n && y == m) ans++; //如果说 到达了终点,那就记录一次
// vis[x][y] = 1;
for (int i = 0; i <= 2; i++) { //开始走迷宫
//x,y代表当前位置 x1,y1代表下一步的位置
int x1 = x + dx[i];
int y1 = y + dy[i];
// if (x1 > n || y1 > m || vis[x1][y1]) //加入回溯判断 如果说下一步的位置超过了终点位,那就跳出本轮循环进入下一次移动,不进入递归
if (x1 > n || y1 > m) //如果说下一步的位置超过了终点位,那就跳出本轮循环进入下一次移动,不进入递归
continue;
dfs(x1, y1); //没有超过终点位置,则进行递归 也就是以下一步的位置作为起点,进行重新循环走迷宫
}
// vis[x][y]=0; //回溯
}
int main() {
dfs(1, 1);//起始点在(1,1)位置
cout << ans << endl;
return 0;
}
已可运用,代码待完善中