鄰接表
//邊表
typedef struct ArcNode
{
int adjvex; //該邊所指向的結點的位置
struct ArcNode *nextarc; //指向下一條邊的指針
int info; //該邊的相關信息(如權值)
}ArcNode;
//頂點表
typedef struct
{
char data; //頂點信息
ArcNode *firstarc; //指向第一條邊的指針
}VNode;
typedef struct
{
VNode adjlist[maxSize]; //鄰接表
int n,e; //頂點數和邊數
}AGraph;
void DFS(AGraph *g,int v)
{
ArcNode *p;
int stack[maxSize],top=-1;
int visit[maxSize];
for(int i=0;i<g->n;++i)
visit[i]=0;
Visit(v);
visit[v]=1;
stack[++top]=v;
while(top!=-1)
{
int k=stack[top];
p=g->adjlist[k].firstarc;
while(p!=NULL&&visit[p->adjvex]==1)
p=p->nextarc;
if(p==NULL)
--top;
else
{
Visit(p->adjvex);
visit[p->adjvex]=1;
stack[++top]=p->adjvex;
}
}
}