2017-05-20 2 views
0

임의의 값 mod 5와 값 X와 배열의 위치의 double 배열을 감안할 때 위치의 값과 모든 이웃을 X로 변경해야합니다. 재귀 적으로 수행하고 있습니다. 나는 아이디어가 정확하다고 생각하지만, 재귀 호출을 사용하여 return 문과 할당을 망칠 것임에 틀림 없다. 언제 메모를 얻을 컴파일 : 예상 'INT **'하지만 인수는 유형 'INT (*) [8]'는 또한채우기 알고리즘 C - 이중 배열 반환?

내가 주에서 함수를 사용하는 경우, 내가 경고 얻을 : 통과 인수 1 호환되지 않는 포인터 유형에서 'floodfill'의 값 table = floodfill (table, i, j, r);

오류 : 배열 유형이있는 표현식에 할당 table = floodfill (table, i, j, r); 표 알고리즘

int ** floodfill (int **tab, int i, int j, int v) 
{ 
    /*if statement to make the values to the right of the specified position 
    equal to the specified value*/ 
    if (tab[i][j+1] == tab[i][j]) 
    { 
     /*the assignment is recursive*/ 
     tab = floodfill (tab, i, j+1, v); 
    } 
    /*this assignment is executed after each of the values to the 
    right of tab[i][j] are changed to v*/ 
    tab[i][j] = v; 

    /*returns the tab with the specified position changed*/ 
    return tab; 
} 

실행되어야하는 테이블이다

분명 코드가 불완전 (더의 malloc없고, 아웃 - 오브 - 결합 위치에 대한 검사만을 오른쪽 값 플러드 필) 미국 간결을 기원하지만, 내 문제와 관련해서는 모든 것이 있어야합니다.

+1

무엇이 질문입니까? 그건 확실하지 않아. – Carcigenicate

+0

'table'은 어떻게 선언되어 있습니까? 2 차원 배열과 T 포인터에 대한 포인터를 혼동하고 있습니까? 경고는 그 경우를 나타냅니다. http://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer를 읽으십시오. –

답변

1

첫째, C 포인터는 사용자가 조작 할 수있는 버퍼를 가리 킵니다. 그들은 전체 버퍼를 값으로 전달하지 않습니다. int **를 반환하는 것은 무의미하며 호출자는 이미 정보를 가지고 있습니다.

둘째, u 값을 새 값으로 floodfill하려는 경우, v. u는 먼저 호출 한 픽셀 값일 수 있습니다.이 경우 주먹 호출이 특별합니다. 더 쉽게 전달할 수 있으므로 함수는 모든 값 u와 이웃 값을 값 v로 변환합니다. tab [i] [j]의 값이 u가 아니면 반환하십시오. 그렇지 않으면 네 방향으로 모두 채울 수 있습니다. 스택에서 조금 무거워 만 작동해야합니다.

void floodfill(int **tab, int u, int v, int i int j) 
{ 
    if(tab[i][j] == u) 
    { 
     tab[i][j[ = v; 
     floodfill(tab, u, v, i+1, ,j); 
     floodfill(tab, u, v, i-1, j); 
     floodfill(tab, u, v, i, j -1); 
     floodfill(tab, u, v, i, j +1); 
    } 
}