2017-04-02 8 views
1

특정 그래프에서 DFS 검색을 시도하고 있습니다. 여기에 다음 코드를 적어 넣으려고했습니다. (많은 오류/경고와 실수가 있음을 알고 있습니다 만 이것은 시작일뿐입니다. 나는 도움이 필요해).인접 목록에 액세스 할 때 사용할 표기법은 무엇입니까?

int visited[]; 
static int last=-1; 
int record_of_visit[]; 


void print_dfs(Graph* graph, int source_id) 
{ 
    //printf("not yet implemented: put code for part 1 here\n"); 
    visited[source_id]=1;     
    record_of_visit[++last]=source_id; 
    int i; 
    for (i=0;i<20;i++) 
    { 
     if (graph[source_id][i]==1) 
     { 
      if(visited[i] == 0) 
       print_dfs(graph,i); 
     } 
    }  
} 

인접성 목록을 구현하는 graph.c 파일은 graph.h 파일 here. 여기

나는 이미 내장 된 그래프에 액세스하려고 찾을 수 있습니다 here.

찾을 수 있습니다 adjacency list하지만 컴파일러가이 프로그램을 실행하면 오류가 발생합니다.

첨자 값이 배열도 포인터도 아니다

여기서 내가 뭘 잘못하고 있니? 또한 내 원시 DFS 구현에서 개선해야 할 사항에 대한 팁이나 제안을 보내 주시면 감사하겠습니다.

+1

하여 붙여 넣기하여 배열의 첫 번째 그래프에서 n을 액세서 수있는 "점", 즉하여 구조체의 요소에 액세스 할 수 있습니다 사설입니다. – yar

+1

함수 선언에서'Graph * graph'는'Graph'에 대한 포인터가 아니라'Graph'에 대한 포인터만을'graph'에 제안합니다. 따라서,'[source_id] [i]'로 두 번 다시 선언하면 작동하지 않습니다. – Evert

+0

적어도 그래프의 정의를 질문의 어딘가에 포함 할 수 있습니다. 외부 링크는 좋은 생각이 아닙니다 (@ yar의 주석은 이유 중 하나 일뿐입니다). – Evert

답변

0

당신은 페이스트 빈에 graph[0].n

+0

문제는 그래프 자체가 배열이나 무언가가 아니기 때문에 (즉, 내가 참조 해제 할 수 없다는 뜻입니다.) 그러나 그래프/정점과 같은 것이 있습니다 (일부 목록/정점을 가리킴) [1] -> first_edge ? –

+0

'struct graph'는'n','maxn'과'vertices'의 세 요소를 포함하는 구조체입니다. 포인터'vertices'의 포인터에'graph [i] .vertices'를 붙여서 접근 할 수 있습니다. 그런 다음 요소에 액세스 할 수 있습니다. '* (graph [i] .vertices [0])'에 의해. 그럼에도 불구하고,'graph'는'graph'에 대한 포인터를 포함하지 않으므로,'Graph * '를 가진 재귀는 이런 식으로 작동하지 않을 것입니다. – yar