2017-04-02 1 views
1

Je tente de faire une recherche DFS sur un certain graphique, ici j'ai essayé d'écrire le code suivant (je suis conscient qu'il y a beaucoup d'erreurs/avertissements et erreurs que j'ai faites mais ce n'est qu'un début et Je ai besoin d'aide).Quelle notation utiliser pour accéder à une liste d'adjacence?

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); 
     } 
    }  
} 

Le fichier graph.c la mise en œuvre de la liste de contiguïté se trouve here.

Le fichier graph.h se trouve here.

Ici, je suis en train d'accéder au graphique qui est un déjà construit liste de contiguïté, mais le compilateur me donnerait l'erreur quand je lance ce programme indiquant que sur if (graph[source_id][i]==1)

la valeur indicée n'est ni tableau ni pointeur

Qu'est-ce que je fais mal ici? Aussi, des conseils ou des suggestions sur ce qu'il faut améliorer dans ma mise en œuvre de DFS encore cru seraient appréciés!

+1

votre pâte sur Pastebin est privé. – yar

+1

'Graph * graph' dans vos déclarations de fonction suggère' graph' seulement un pointeur vers 'Graph', pas un pointeur vers' Graph'. Par conséquent, le déréférencer deux fois avec '[source_id] [i]' ne fonctionnera pas. – Evert

+0

Vous pouvez au moins inclure la définition de 'Graph' quelque part dans votre question; Les liens externes ne sont pas une bonne idée (le commentaire de @ yar n'est qu'une raison). – Evert

Répondre

0

Vous pouvez accéder à des éléments d'une structure par un « point », à savoir que vous pouvez acces n du premier graphique dans votre tableau en graph[0].n

+0

Chose est l'erreur que j'ai indique que le graphique lui-même n'est pas un tableau ou quelque chose (d'où je ne peux pas le référencer), mais il pointe vers des listes/sommets, y at-il quelque chose comme graph-> vertices [a] -> first_edge ? –

+0

'struct graph' est une structure qui contient trois éléments: 'n', 'maxn' et 'vertices'. Vous pouvez accéder au pointeur des pointeurs 'vertices' avec' graph [i] .vertices'. Ensuite, vous pouvez accéder à un élément, par ex. par '* (graphique [i] .vertices [0])'. Néanmoins, 'graph' ne contient pas de pointeurs sur' graph', donc la récursion avec 'Graph *' ne fonctionnera pas de cette façon. – yar