-3
смежности список представления нижечто проблема с ниже код
1---2--3-4
2---1--5
3---4--1
4---1--3
5---2--4
После печати списка смежности, он не дает никакого вывода. может кто-нибудь объяснить, в чем проблема. Нижеприведенный код представляет собой простую реализацию ненаправленного графика в списке смежности.
#include<stdio.h>
#include <stdlib.h>
#define maxNode 5
typedef struct Node
{
int vertexNum;
struct Node *next;
} Node;
typedef struct List
{
int n;
struct List *head;
} List;
List *adjlist[maxNode] = { 0 };
void printList();
void addNode (int source, int destination);
int
main()
{
/* init our graph nodes */
int i = 1;
for (i; i <= maxNode; i++)
{
adjlist[i] = (List *) malloc (sizeof (List));
adjlist[i]->head = NULL;
}
addNode (1, 2);
addNode (1, 3);
addNode (1, 4);
addNode (2, 1);
addNode (2, 5);
addNode (3, 4);
addNode (3, 1);
addNode (4, 1);
addNode (4, 3);
addNode (5, 2);
addNode (5, 4);
printList();
return 0;
}
void
addNode (int source, int destination)
{
Node *src = (Node *) malloc (sizeof (Node));
src->vertexNum = source;
Node *dest = (Node *) malloc (sizeof (Node));
dest->vertexNum = destination;
/* now source and destination is an edge */
/* then it should be listed in list */
adjlist[source] = src;
adjlist[source]->head = NULL;
src->next = NULL;
List *tmp = adjlist[source];
while (tmp->head != NULL)
tmp = tmp->head;
tmp->next = dest;
dest->next = NULL;
}
void
printList()
{
int i = 1;
for (i = 1; i <= maxNode; ++i)
{
Node *p = adjlist[i]->head;
printf ("Adjacency list for vetex %d\n", i);
while (p)
{
printf ("%d ", p->vertexNum);
p = p->next;
}
printf ("\n");
}
}
[ты не отбрасывать результат таНос] (http://stackoverflow.com/questions/605845/do-i-cast-the-result -of-таНос). –
[Возможно, вы захотите] (http://en.wikipedia.org/wiki/Zero-based_numbering) 'i = 0; i
Michael
Btw, строка 63:' src' - это 'Node *' и 'adjlist []' содержит 'List *', поэтому 'adjlist [source] = src' не должен даже компилировать * , а тем более производить продукцию. – WhozCraig