2013-d-二-3


/**
    算法思想:从一个顶点采用深度优先搜索遍历,
                如果能访问到所有结点则该顶点为根。
**/
#define maxSize 100
int visit[maxSize];//标记访问数组
int num=0;//用于统计访问过的节点数

void SearchRoot(AGraph *G)
{
    int i;
    for(i=0;i<G->n;++i) visit[i]=0;//设置未访问
    for(i=0;i<G->n;++i)
    {
        DFS(G,i);
        if(num==G->n) printf("%c",G->adjlist[i].data);
        for(i=0;i<G->n;++i) visit[i]=0;//设置未访问
        num=0;
    }
}

void DFS(AGraph G,int v)
{
    ArcNode *p;
    visit[v]=1;
    ++num;//用于记录访问过顶点的数量
    p=adjlist[v].firstarc;
    while(p!=NULL)
    {
        if(visit[p->adjvex]==0)
            DFS(G,p->adjvex);
            p=p->nextarc;
    }
}