总的来说有以下三种方式:
链表:
//存储结构 struct Node { int vex; Node* next; }; Node *head[M]; //添加一个有向边 void addADJ(int u,int v) { Node *p; p=(Node*)malloc(sizeof(Node)); p->vex=v; p->next=head[u]; head[u]=p; } //遍历 for(Node *p=head[u];p!=NULL;p=p->next) int v=p->vex;//连接u的结点v //初始化 memset(head,NULL,sizeof(head)); 链式前向星:(有点儿静态链表意思) //存储结构 struct Edge { int next; int to; }edge[M]; int head[M]; int cnt=0; //添加一个有向边 void add(int u,int v) { edge[cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt++; } //遍历 for(int i=head[u];~i;i=edge[i].next) int v=edge[i].to; //初始化 memset(head,-1,sizeof(head)); stl库: //存储结构 vector<int> node[M]; //添加一个有向边 node[u].push_back(v); //遍历 for(int i=0;i<node[u].size();i++) int v=node[u][i];
