5-3 本题要求实现对图的深度优先遍历。 本题中图的表示采用邻接表表示

程序填空题
5-3
本题要求实现对图的深度优先遍历。 本题中图的表示采用邻接表表示

#include <stdlib.h>
#include <stdio.h>

typedef struct    GRAPHLISTNODE_STRU
{
    int nodeno;  /*图中结点的编号 */
    struct    GRAPHLISTNODE_STRU* next;  /*指向下一个结点的指针 */
}GraphListNode;

typedef struct    GRAPHLIST_STRU
{
    int size; /* 图中结点的个数 */
    GraphListNode* graphListArray; /*图的邻接表 */
}GraphList;

GraphList* InitGraph(int num)
{
    int i;
    GraphList *graphList = (GraphList *)malloc(sizeof(GraphList));
    graphList->size = num;
    graphList->graphListArray = (GraphListNode*)malloc(sizeof(GraphListNode)*num);
    for (i = 0; i<num; i++)
    {
        graphList->graphListArray[i].next = NULL;
        graphList->graphListArray[i].nodeno = i;
    }
    return graphList;
}

void ReadGraph(GraphList* graphList)
{
    int vex1, vex2;
    GraphListNode *tempNode = NULL;

    /** 输入方式为点 点 ,点为-1,则输入结束 **/
    scanf("%d %d", &vex1, &vex2);
    while (vex1 >= 0 && vex2 >= 0)
    {
        tempNode = (GraphListNode*)malloc(sizeof(GraphListNode));
        tempNode->nodeno = vex2;
        //tempNode->next = NULL;
        /**采用头插法**/
        tempNode->next=graphList->graphListArray[vex1].next;
        graphList->graphListArray[vex1].next=tempNode;
        scanf("%d %d", &vex1, &vex2);
    }
}

/*从节点i开始深度优先遍历*/
void DFS(GraphList* graphList, int * visited, int i)
{
    int j;
    GraphListNode *tempNode = NULL;
    visited[i] = 1;
    printf("%d ", i);
    tempNode = graphList->graphListArray[i].next;
    while (tempNode != NULL)
    {
        if (!visited[tempNode->nodeno])
        DFS(graphList,visited,tempNode->nodeno);
        tempNode=tempNode->next;
         }
}

/*图的深度优先遍历*/
void DFSGraphList(GraphList* graphList)
{
    int i;
    /* 用于记录图中哪些结点已经被访问了 */
    int *visited = (int*)malloc(sizeof(int)* graphList->size);

    /* 初始化为点都没有被访问 */
    for (i = 0; i < graphList->size; i++)
        visited[i] = 0;

    for (i = 0; i < graphList->size; i++)
    if (!visited[i]) 
        DFS(graphList, visited, i);
}


int main()
{
    GraphList *graphList = NULL;
    graphList = InitGraph(6);
    ReadGraph(graphList);
    DFSGraphList(graphList);
    return 0;
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微__凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值