DFS有向图(用c++编译运行)

 DFS有向图(用c++编译运行)_第1张图片

DFS有向图(用c++编译运行)_第2张图片

# include
# include 
# define Max 100
//链表结点的结构定义
struct ListNode{//存放的是链表的节点 
    int index;// 所连接定点的下标 
    //int info;//改边所对应的权值 
    struct ListNode *next;
};

//顶点的结构定义
struct VNode{
    char str;//存放的是顶点字符
    ListNode *firstarc;//邻接表顶点指针域
};

//图结构定义
struct ALGraph{
    VNode vertex[Max];
    int vexnum;//存放的是定点的个数 
    int arcnum;//存放的是边的个数 
};

//数组,记录顶点的两种状态:0表示未访问该顶点,1表示已经访问过该顶点
int visited[Max];

//已知字符u,找到该顶点对应的下标并返回
int LocateVex(ALGraph G,char u)
{
    int i;
    for (i=0;iindex=j;//  要链接顶点的下标 
        p->next=G.vertex[i].firstarc;
        G.vertex[i].firstarc=p;
   
    }
    printf("\nDFS其中的一种序列为:");

}
void DFS(ALGraph &G, int v)
{
   ListNode *p;  
   printf("%c",G.vertex[v].str);
   visited[v]=1;
   p=G.vertex[v].firstarc;//头结点 
    while (p)
    {  
      if (!visited[p->index])//如果是未遍历过的顶点
       DFS(G,p->index);       //递归模拟栈
        p=p->next;
    }
}

//把每个顶点分别作为起点开始
void DFSTraverse(ALGraph &G)
{
   for (int v=0;v

你可能感兴趣的:(深度优先,图论,算法)