深度优先生成树

来源:互联网 发布:linux安装软件步骤 编辑:程序博客网 时间:2024/04/25 10:13
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{    int adjvex;    struct node * next;}Node;typedef struct{    int vertex;    Node * first;}VNode;int visited[MAXSIZE];void create(VNode g[],int n,int e){     //创建无向图的邻接表    Node * p;    int i,j;    for(int k=0;k<n;k++){        g[k].vertex = k;        g[k].first = NULL;    }    for(int t=0;t<e;t++){        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 i){    Node * p;    p = g[i].first;    visited[i] = 1;    while(p != NULL){        if(!visited[p->adjvex]){            printf("(%d,%d)  ",i,p->adjvex);            DFS(g,p->adjvex);        }else{            p = p->next;        }    }}void DFSTree(VNode g[],int n,int e){        //深度优先生成树    create(g,n,e);    for(int t=0;t<n;t++){        visited[t] = 0;    }    for(int k=0;k<n;k++){        if(!visited[k]){            DFS(g,k);        }    }}int main(){    VNode g[MAXSIZE];    int n,e;    printf("请输入节点的个数!\n");    scanf("%d",&n);    printf("请输入边的条数!\n");    scanf("%d",&e);    DFSTree(g,n,e);    return 0;}
0 0
原创粉丝点击