#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef 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;
}
深度优先生成树
最新推荐文章于 2023-11-22 17:44:11 发布