在如下8*6的矩阵中,请计算从A移动到B一共有多少种走法,要求每次只能向上或向右移动一格,并且不能通过P()
B | |||||||
P | |||||||
A |
public class Demo06 { public static void main(String[] args) { int i =Solution(8,6);//A到B全部走法792 int j =Solution(5,3);//A到P的全部走法 int k = Solution(4,4);//P到B的走法 System.out.println(i-j*k); } public static int Solution( int m,int n){ if(m<=1||n<=1){ return 1; }if (m==2 && n ==2){ return 2; }else { return Solution(m, n-1)+Solution(m-1,n); } } }简单的递归调用。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int g[6][8]; bool vis[6][8]; int ans; int dir[2][2]={{-1,0},{0,1}}; void dfs(int x,int y) { if(x==0&&y==7){ ans++; return; } vis[x][y]=true; for(int i=0;i<2;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(xx>=0&&xx<6&&yy>=0&&yy<8&&!vis[xx][yy]&&!g[xx][yy]){ dfs(xx,yy); } } vis[x][y]=false; } int main() { memset(g,0,sizeof(g)); memset(vis,false,sizeof(vis)); g[3][4]=1; ans=0; dfs(5,0); cout<<ans<<endl; return 0; }