/* depth-first traversal
* two methods: recursive and non-recursive
* Graph is stored in an adjacency matrix
*/
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int sp = 0;//stack pointer
int stack[MAX];
/**********************stack***************************/
void push(int f)
{
if(sp < MAX)
stack[sp++] = f;
else
printf("error: stack full, can't push %d\n", f);
}
int pop(void)
{
if(sp > 0)
return stack[--sp];
else {
printf("error: stack empty\n");
return 0;
}
}
void buildGraph(int adj[][MAX], int n)
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
printf("Enter 1 if there is an edge from %d to %d", i, j);
scanf("%d", &adj[i][j]);
}
}
/* depth-first traverse, start from node x by using recursive method*/
void dfs(int x, int visited[], int adj[][MAX], int n)
{
int j;
visited[x] = 1;
printf("visit node %d\n", x);
for(j=0; j<n; j++)
{
if(adj[x][j] == 1 && visited[j]
图深度优先遍历(递归和栈实现)
最新推荐文章于 2022-03-08 11:45:02 发布