用C语言写一个图的深度遍历
时间: 2023-12-29 16:09:02 浏览: 63
#include<stdio.h>
#define MAX 50 // 定义最大顶点数
int visited[MAX]; // 标记节点是否被访问过
typedef struct node{ // 定义链表节点
int data;
struct node *next;
}Node;
typedef struct{ // 定义邻接表
Node *head;
}List;
List graph[MAX]; // 定义邻接表数组
void dfs(int v){ // 深度优先遍历函数
Node *p;
visited[v]=1; // 标记节点v已被访问
printf("%d ",v); // 输出节点v
p=graph[v].head; // 指向节点v的第一个邻居
while(p!=NULL){ // 遍历所有邻居节点
if(!visited[p->data]){ // 如果节点未被访问过
dfs(p->data); // 递归访问邻居节点
}
p=p->next; // 指向下一个邻居节点
}
}
int main(){
int n,m,i,j;
int a,b;
printf("请输入顶点数和边数:");
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){ // 初始化邻接表
graph[i].head=NULL;
}
for(i=1;i<=m;i++){ // 建立邻接表
printf("请输入边%d的两个顶点:",i);
scanf("%d%d",&a,&b);
Node *p1=(Node*)malloc(sizeof(Node));
p1->data=b;
p1->next=graph[a].head;
graph[a].head=p1;
Node *p2=(Node*)malloc(sizeof(Node));
p2->data=a;
p2->next=graph[b].head;
graph[b].head=p2;
}
printf("请输入遍历起点:");
scanf("%d",&j);
printf("深度优先遍历结果:");
dfs(j); // 深度优先遍历
return 0;
}
阅读全文