【发布时间】:2015-07-05 14:18:11
【问题描述】:
我正在使用一个简单的回溯算法来查找所有路径,但它没有给出正确的答案。我无法弄清楚错误。我们可以从给定位置上下左右移动。
Int path(int a[][200],int n,int m,int r,int c)
{
if(n == r - 1 && m == c-1) {
return 1;
}
else if(n >= r || m >= c || n < 0 || m < 0) {
return 0;
}
else if(vis[n][m] == 1) {
return 0;
}
else {
vis[n][m] = 1;
int x = path(a,n+1,m,r,c);
int y = path(a,n,m+1,r,c);
int u = path(a,n-1,m,r,c);
int v = path(a,n,m-1,r,c);
vis[n][m] = 0;
return (x+y+u+v);
}
}
【问题讨论】:
-
为什么要写程序统计路径总数?只是 (2n!) / (n!)^2,不是吗?
-
你可以向上和向左移动,还是只能向右和向下移动(通常是这样问的问题)?
-
我的排列组合没那么强。
-
只有上下还是四个方向?
-
查看
2n choose n的方法是要弄清楚你总共要走2n步(n下,n右),并且在你选择的那些中n往下走,另一个n你往右边走。
标签: c++ algorithm backtracking