美文网首页
图的深度遍历

图的深度遍历

作者: 奋斗live | 来源:发表于2019-01-30 17:06 被阅读0次
#include<stdlib.h>
#include<string.h>
#include<stdio.h>

#define MaxSize 20
typedef struct Node{
    char vex;
    int location;
    struct Node * next; 
}MapNode; 
int node_num;
int visited[MaxSize];

void createMap(MapNode **p ){
    char ch;
    int i=0;
    MapNode * q,* new_node;
    (*p) = (MapNode *)malloc(sizeof(MapNode)*MaxSize);
    printf("请输入图的节点:\n");
    scanf("%c",&ch);
    while(ch!='\n'){
        (*p)[i].vex = ch;
        (*p)[i].next = NULL;
        (*p)[i].location = i;
        i++;
        scanf("%c",&ch);
    }
    node_num = i;

    for(i=0;i<node_num;i++){
        q = (*p)+i;
        printf("请输入%c的邻接节点:\n",q->vex);
        scanf("%c",&ch);
        while(ch!='\n'){
             new_node = (MapNode *)malloc(sizeof(MapNode));
            new_node->vex = ch;
            new_node->next = NULL;
            q->next = new_node;
            q = new_node;
            scanf("%c",&ch);
        }
    }
}

int get_index(MapNode *p,char v){
    int i;
    for(i=0;i<node_num;i++){
        if(p[i].vex ==v){
            return i;
        }
    }
    return -1;

}

void depth(MapNode *p,int i){
    MapNode *q;
    q = p+i;
    printf("%c ",q->vex);
    visited[i] = 1;
    q= q->next;
    while(q){
        int index = get_index(p,q->vex);
        if(visited[index]==0){
            depth(p,index);
        }
        q = q->next;
    }
}


void print_depth(MapNode *p){
    int i;
    for(i=0;i<node_num;i++){
        visited[i] = 0; 
    }
    printf("图的深度遍历:\n");
    for(i=0;i<node_num;i++){
        if(visited[i]==0){
            depth(p,i);
        }
    }
}

void print(MapNode *p){
    printf("图的邻接表:\n");
    int i;
    MapNode *q;
    for(i=0;i<node_num;i++){
        printf("%c:",p[i].vex);
        q = p[i].next;
        while(q){
            printf("%c->",q->vex);
            q = q->next;
        }
        printf("\n");
    }
}

int main(){
    MapNode *p;
    createMap(&p);
    print(p);
    print_depth(p);
    return 0;
}

结果如下图


image.png

相关文章

  • 图的深度优先遍历和马踏棋盘算法

    图的深度优先遍历思想 图的遍历通常有两种遍历次序方案: 深度优先遍历和广度优先遍历。深度优先遍历(DepthFir...

  • 数据结构与算法学习-图的遍历

    图的遍历可以分为:深度优先遍历和广度优先遍历 一、深度优先遍历 深度优先遍历的实现思路 将图的顶点和边信息输⼊入到...

  • 图的DFS && BFS遍历

    对图的深度优先遍历: 对图的广度优先遍历:

  • 哈夫曼实现 图:十字链表,邻接多重链表,邻接表(无向),邻接表

    图的遍历: 无论是广度优先,还是深度优先都是以箭头方向右边的优先遍历; 广度优先遍历(无向图): 深度优先(无向图...

  • 数据结构—图的遍历

    根据图的存储方式可分为邻接矩阵的深度优先遍历和邻接表的深度优先遍历。 一、深度优先遍历 1、邻接矩阵的深度优先遍历...

  • 基本数据结构

    一.图二.树 一.图 1.图的遍历: 通过深度优先遍历DFS和广度优先遍历BFS两种方式。深度优先遍历0 1 2 ...

  • 图的遍历

    1.前言 对于图的遍历来说通常有两种遍历次序,它们是深度优先遍历和广度优先遍历 2.深度优先遍历 深度优先遍历(D...

  • 10.图的深度优先遍历、联通分量与寻路

    图的深度优先遍历、联通分量与寻路 点击这里,前提知晓... 深度优先遍历对有向图和无向图都可以使用 一、图的深度优...

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 图 深度和宽度遍历

    图的深度遍历依赖于递归、 图的宽度优先遍历依赖于队列

网友评论

      本文标题:图的深度遍历

      本文链接:https://www.haomeiwen.com/subject/rsucsqtx.html