图的深度优先搜索(采用邻接表存储方式)

来源:互联网 发布:西门子828d编程实例 编辑:程序博客网 时间:2024/05/19 19:33
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20int visited[MAXSIZE];typedef struct node{    int adjvex;    struct node * next;}Node;typedef struct{    int vertex;    Node * first;}VNode;void create(VNode g[],int n,int e){         //创建无向图的邻接表    Node * p;    int i,j;    for(int t=0;t<n;t++){        g[t].vertex = t;        g[t].first = NULL;    }    for(int k=0;k<e;k++){        printf("请输入连通边i->j\n");        scanf("%d,%d",&i,&j);        p = (Node *)malloc(sizeof(Node));        p->adjvex = j;        p->next = g[i].first;        g[i].first = p;        p = (Node *)malloc(sizeof(Node));        p->adjvex = i;        p->next = g[j].first;        g[j].first = p;    }}void DFS(VNode g[],int j){              Node * p;    printf("%4d",g[j].vertex);    visited[j] = 1;    p = g[j].first;    while(p != NULL){        if(!visited[p->adjvex]){            DFS(g,p->adjvex);        }else{            p = p->next;        }    }}void DFSprint(VNode g[],int n){         //深度优先搜索进行遍历    for(int i=0;i<n;i++){        visited[i] = 0;    }    for(int j=0;j<n;j++){        if(!visited[j]){            DFS(g,j);        }       }}int main(){    VNode g[MAXSIZE];    int n,e;    printf("请输入节点的个数!\n");    scanf("%d",&n);    printf("请输入边的个数\n");    scanf("%d",&e);    create(g,n,e);    printf("深度优先搜索结果:\n");    DFSprint(g,n);    return 0;}
0 0
原创粉丝点击