我正在学习C并且这样做我决定写一个数独求解器。我无法使用solve函数返回已解决的板,我的想法是问题是递归函数调用。
我将字符串作为字符串传递,找到电路板中第一个“0”的索引,并使用该索引构建该位置的可能值列表。然后我迭代可能性,复制原始板,并用可能性替换零,然后递归地将新板传递给solve函数。代码如下:
char *solve(char *board)
{
int zero = strcspn(board, "0");
if(zero > 80) {
return board;
} else {
char *possibilities = getPossibilities(zero, board);
if(possibilities != '\0') {
for(int i = 0; i < strlen(possibilities); i++) {
char *new_string = malloc(strlen(board) * sizeof(char));
memcpy(new_string, board, strlen(board));
new_string[zero] = possibilities[i];
return solve(new_string);
}
}
}
}
理想情况下,当字符串不再具有任何“0”时,该函数应返回。但是我得到一些奇怪的输出,看起来像:
The string is �96245781100060004504810390007950043030080000405023018010630059059070830003590007
我无法盯着这个问题。该计划的全部要点是here。我会喜欢任何输入。提前谢谢!
答案 0 :(得分:0)
char *new_string = malloc(strlen(board) * sizeof(char));
您需要为'\ 0'终止字符分配,并将其更改为
char *new_string = malloc(strlen(board) + 1);
并将memcpy
更改为strcpy
char * strcpy (new_string, board);