指针没有指向矩阵中的正确位置。我想问一下为什么。 以下是我一直在研究的问题的描述,来自 JudgeGirl。
描述 编写一个程序来计算从矩阵左下角到右上角的路径数。矩阵有 r 行和c 列。您只能将一个单元格移动到另一个单元格,并且只能移动到右侧或顶部。矩阵中也有障碍物,你不能进入任何有障碍物的单元格。请计算一下你可以走多少条路。请注意,强烈建议您用“递归”的方式思考来解决这个问题。
限制 两者都 和c 不超过12个 .
输入格式 有r+1个 输入中的行。第一行有 r 和c 下一个r 行具有矩阵的状态。 1 表示可以通过的单元格,0 表示障碍物。左下角和右上角都是1。
这是我的代码,结果发现指针没有指向正确的地址:
#include <stdio.h>
#include <assert.h>
void count(int x, int y, int r, int c, int *ptr, int *ways){
if((*ptr==0)||(x>(c-1))||(y<0)){
return;
}else{
//printf("(%d, %d) %d", x, y, *matrix);
}
if((x==(c-1))||(y==0)){
*ways += 1;
return;
}
count(x+1, y, r, c, &(*(ptr+1)), &(*ways));
count(x, y-1, r, c, &(*(ptr-c)), &(*ways));
return;
}
int main(){
int r, c; //y:r x:c
scanf("%d %d", &r, &c);
assert((r<=12)&&(c<=12));
int matrix[c][r];
for(int j=0; j<r; j++){
for(int i=0; i<c; i++){
scanf("%d", &matrix[i][j]);
//printf("%d ", matrix[i][j]);
}
//printf("\n");
}
int ways = 0;
count(0, r-1, r, c, &matrix[0][r-1], &ways); //from(0,r-1) to (c-1,0)
printf("%d", ways);
return 0;
}
在 C 中,二维数组不是存储为二维连续数组(请参阅 、C 多维数组是否连续无孔?),因此使用指针算术将无法按您的预期工作。相反,您可以使用“i-j”将二维数组作为普通数组[i][j]访问。 在基础中最好检查matrix[i][j] == 0。 希望这有帮助。