Code:#include <stdio.h> #include <stdlib.h> #define maxM 50 #define maxN 50 #define bool short #define true 1 #define false 0 const short dirt[][] = {{2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, -2}, {2, -1}}; /* global varibles */ short m, n, half_tree; short jw[maxM][maxN]; // jw = jump way bool exist_way; /* End of global varibles */ void extra_find(short x, short y, short *depth) { int new_x, new_y, i; for (i = 0; i < 8; i++) { new_x = x+dirt[i][0]; new_y = y+dirt[i][1]; if ((new_x >= 0) && (new_y < m) && (new_y >= 0) && (new_y < n)) if (jw[new_x][new_y] == 0) { jw[new_x][new_y] = half_tree + *depth; if (*depth == m*n) { exist_way = true; exit(0); } else extra_find(new_x, new_y, &((*depth)++)); jw[new_x][new_y] = 0; } } } void find(short x, short y, short *depth) { short x_coord, y_coord, new_x, new_y, max_depth, i; bool expand; x_coord = x; y_coord = y; expand = false; for (i = 0; i < 8; i++) { new_x = x+dirt[i][0]; new_y = y+dirt[i][1]; if ((new_x >= 0) && (new_y < m) && (new_y >= 0) && (new_y < n)) if (jw[new_x][new_y] == 0) { expand = true; jw[new_x][new_y] = *depth; if (*depth == m*n) exit(0); else if (*depth < half_tree) find(new_x, new_y, &((*depth)++)); jw[new_x][new_y] = 0; } } if (!expand) { max_depth = *depth; extra_find(x_coord, y_coord, &max_depth); } } void double_bfs() { short x_coord, y_coord, i, j; for (i = 0; i < m; i++) for (j = 0; j < n; j++) jw[i][j] = 0; for (x_coord = 0; x_coord < m; x_coord++) for (y_coord = 0; y_coord < n; y_coord++) { jw[x_coord][y_coord] = 1; find(x_coord, y_coord, 2); } } int main() { FILE *fr, *fw; short i, j; fr = fopen("horse.dat", "rt"); fw = fopen("horse.out", "wt"); fscanf(fr, "%d %d", &m, &n); half_tree = (int)((m*n)/2); double_bfs(); if (exist_way) for (i = 0; i < m; i++) { for (j = 0; j < n; j++) fprintf(fw, "%4d", jw[i][j]); fprintf(fw, "\n"); } else fprintf(fw, "No solution."); fclose(fr); fclose(fw); return 0; }HowTo increase 1 value to the depth pointer and pass by ref in find and extra_find function? What's wrong in this instruction?Code:horse.c:8: error: array type has incomplete element type horse.c: In function ‘extra_find’: horse.c:30: error: invalid lvalue in unary ‘&’ horse.c: In function ‘find’: horse.c:52: error: invalid lvalue in unary ‘&’ horse.c: In function ‘double_bfs’: horse.c:71: warning: passing argument 3 of ‘find’ makes pointer from integer without a cast
find(x_coord, y_coord, 2);



LinkBack URL
About LinkBacks


