J'étudie des graphes pour l'instant, et j'utilise C. Quand je représente un graphe avec une liste d'adjacence, j'ai besoin d'une file d'attente pour une traversée BFS. Cependant, j'ai quelques problèmes avec le code - je ne suis pas sûr si j'ai bien compris le concept d'une traversée bfs avec des files d'attente.Traçage du graphe BFS en utilisant une file d'attente [C]
J'ai collé le code commenté ci-dessous, j'espère que c'est lisible. Quelqu'un peut-il vérifier, ou au moins fournir des informations sur la façon de tirer le bon chemin?
typedef struct {
char name[21], surname[21];
double gpa;
} STUDENT;
typedef struct {
int index;
struct graph *next;
STUDENT s;
} GRAPH_NODE;
typedef struct {
GRAPH_NODE *nodes[50];
int n;
} GRAPH;
//QUEUE is also a struct, but no need to paste it here
void bfs(GRAPH g, int start) {
QUEUE queue;
queue.f = -1;
queue.r = 0;
int v; //will hold the index of the node taken off the queue
// (the one that's processed)
int visited[MAX] = {0};
visited[start] = 1;
addToQueue(&queue, start); //first node is visited, goes to queue
while (deleteFromQueue(&queue, &v)) {
printf("%d. ", v+1);
printStudent(g.nodes[v].s);
GRAPH_NODE *current = g->nodes[v];
current->index = v; //not sure if this is right
//this is the part I'm suspicious about
while (current) {
int u = current->index;
if (!visited[u]) {
visited[u] = 1;
addToQueue(&queue, u);
}
current = current->next;
}
}
}
"J'ai des problèmes avec le code" - Il serait beaucoup plus facile de vous aider si vous étiez plus précis sur ces problèmes. Avez-vous testé, avec quels résultats? – hcs
Cela ne compilera pas. Qu'est-ce qu'un 'struct graph'? Personnellement, je trouve que l'utilisation d'ALLCAPS pour les noms de fichiers est difficile à lire, mais les goûts diffèrent. – rici