Ich versuche, die Anzahl der verbundenen 1 in einer Matrix mit einer rekursiven Funktion zu zählen. Die Größe (max_sz) durch Verweis rekursiv zu übergeben, gibt mir Probleme, aber ich verstehe nicht, warum es heißt, dass mir eine Klammer fehlt.Fehler erwartet ')' versuchen, durch Verweis zu übergeben
Ich habe das seit 30 Minuten und habe keine Ahnung, warum ich diesen Fehler bekomme. Die Syntax sieht für mich richtig aus, aber ich bin ein C-Anfänger, also schätze ich, dass ich auf etwas gestoßen bin, das ich vorher nicht gesehen habe (oder ich bin nur blind).
Hier ist mein Code:
#include <stdio.h>
#include <stdlib.h>
int getval(int (*A)[5], int i, int j, int L, int H) {
if(i<0 || i>=L || j<0 || j>=H)
return 0;
else {
return A[i][j];
}
}
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
if(r>=L || c >=H)
return;
cntarr[r][c]=1;
size++;
if(size>max_sz)
max_sz = size;
//search in eight directions
int direction[][2]={{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
for(int i=0; i<8; i++) {
int newi = r+direction[i][0];
int newj = c+direction[i][1];
int val = getval(A, newi, newj, L, H);
if(val>0 && (cntarr[newi][newj]==0)){
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
}
}
cntarr[r][c]=0;
}
int** create2darr(int rmax, int colmax) { // In C99, you can use variable-length arrays:
int **mat = (int**)malloc(rmax*sizeof(int*));
for(int i = 0; i < rmax; i++) mat[i] = (int*)malloc(colmax * sizeof(int));
return mat;
}
int getMaxOnes(int (*A)[5], int rmax, int colmax) {
int max_sz = 0;
int size = 0;
int **cntarr = create2darr(rmax, colmax);
for(int i=0; i<rmax; i++){
for(int j=0; j<colmax; j++){
if(A[i][j] == 1){
findMaxBlock(A, i, j, rmax, colmax, 0, cntarr, max_sz);
}
}
}
return max_sz;
}
int main(int argc, char *argv[]) {
int zarr[][5] = {{1,1,0,0,0},{0,1,1,0,0},{0,0,1,0,1},{1,0,0,0,1},{0,1,1,1,1}};
printf("Number of maximum 1s are %d\n", getMaxOnes(zarr, 5, 5));
}
/*
11000
01100
00101
10001
01111
ans: 7 (diagonals count too)
*/
Hier sind die Fehler generiert:
connected1sInMatrix.c:14:88: error: expected ')'
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:18: note: to match this '('
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:14:88: error: parameter name omitted
void findMaxBlock(int (*A)[5], int r, int c, int L, int H, int size, int **cntarr, int &max_sz){
^
connected1sInMatrix.c:19:10: error: use of undeclared identifier 'max_sz'
if(size>max_sz)
^
connected1sInMatrix.c:20:3: error: use of undeclared identifier 'max_sz'
max_sz = size;
^
connected1sInMatrix.c:28:52: error: use of undeclared identifier 'max_sz'
findMaxBlock(A, newi, newj, L, H, size, cntarr, max_sz);
^
5 errors generated.
Ich weiß Stackoverflow kein Debugger ist, aber ich bin völlig verloren, was hier vor sich geht. Jeder Rat oder Vorschläge wird sehr geschätzt, danke.
Oh wow ich kann nicht glauben, ich hätte nie gedacht, das war ein C++ nur Funktion. Vielen Dank. – Austin