马走日字问题

此类问题会有几种情况:现在列举其中几种1.让我们去求从一个点到另一个点的路径总数;2.列举出从一个点到另一个点的路径(可根据第一种情况的代码修改即可,一般是通过一个二维数组来记录每条路径);3.最短路径(涉及动态规划)

情况1的示例代码:

//从(0,0)到(n-1,m-1)的路径总数,n是行数,m是列数,规定只能向右和向上走以及向下走,不能向左走
//这里可以不需要利用visited来记录是否走过。有点多余了
#include<iostream> #include<vector> using namespace std; void help(vector<vector<int>>&a, int n, int m, vector<vector<int>>&visited, int &count,int i,int j){ visited[i][j] = 1; if (i == n - 1 && j == m - 1){ count++; visited[i][j] = 0; return; } else{ if (i + 1 < n&&j + 2 < m&&visited[i + 1][j + 2] == 0){ help(a, n, m, visited, count, i + 1, j + 2); } if (i + 2 < n&&j + 1 < m&&visited[i + 2][j + 1] == 0){ help(a, n, m, visited, count, i + 2, j + 1); } if (i - 1 >= 0 && j + 2 < m&&visited[i - 1][j + 2] == 0)help(a, n, m, visited, count, i - 1, j + 2); if (i - 2 >= 0 && j + 1 < m&&visited[i - 2][j + 1] == 0)help(a, n, m, visited, count, i - 2, j + 1); } visited[i][j] = 0; } int main(){ vector<vector<int>>board(4, vector<int>(4, 0)); vector<vector<int>>visited(board); int count = 0; help(board, board.size(), board[0].size(), visited, count, 0, 0); cout << count << endl; system("pause"); return 0; }

 

posted @ 2018-07-12 19:24  追逐更好的自己  阅读(840)  评论(0编辑  收藏  举报