深度优先搜索:从图的某顶点出发,依次访问该顶点的邻接点。
广度优先搜索:类似树的按层次遍历 依次访问某顶点各个未访问的顶点。
以遍历下图为例:

假设从1点开始遍历,深度优先:1能到2,到了2以后就不管1能到的3,5了,就直接以2为起始点,以此类推,知道到达一个点不能再继续往下,则退回到上一个结点,直到所有的点被遍历,举例其中的一个深度优先搜索:1-2-4-5-6-7-8-9-3
而广度优先:1能到2,3,5则先遍历2,3,5,再依次从2,3,5中取出一点,遍历此结点所有的邻结点,知道所有的点被遍历,举例其中的一个广度优先搜索:1-2-3-5-4-6-8-7-9
下面我们用C语言实现它们,将1-9编号为0-8(便于直接用数组a[9][9]表示),a[i][j]=1表示i能到达j,a[i][j]=0表示i不能到达j,(其中0<=i,j<=8),vistied[9]表示某点是否被访问,如visited[3]=0,表示3点未被访问,visited[4]=1表示4点已访问。下面是代码的实现:
#include <stdio.h>
#define N 9
int a[N][N]={{0,1,1,0,1,0,0,0,0}
,{0,0,0,1,1,0,0,0,0}
,{0,0,0,0,1,1,0,0,0}
,{0,0,0,0,1,0,0,1,0}
,{0,0,0,0,0,1,0,0,0}
,{0,0,0,0,0,0,1,0,1}
,{0,0,0,1,1,0,0,1,0}
,{0,0,0,0,0,0,0,0,0}
,{0,0,0,0,0,0,1,1,0}};
int visited[N]={0,0,0,0,0,0,0,0,0};
int Q[N];
void BFS(int G[][N], int s) //G[i][j]=1表示i可以到达j,s表示搜索的起始点
{
visited[s] = 1;
Q[0]=s;
int first=-1,last=0,v;
while(first!=last)
{
v=Q[++first];
for (int i=0;i<N;i++)
{
if (G[v][i]==1)
{
if(visited[i] == 0)
{
Q[++last]=i;
visited[i] = 1;
}
}
}
}
}
static int last=-1;
void DFS(int G[][N], int s)
{
visited[s] = 1;
Q[++last]=s;
for (int i=0;i<N;i++)
{
if (G[s][i]==1)
{
if(visited[i] == 0)
DFS(G,i);
}
}
}
int main()
{
// BFS(a,0);
// for (int i=0;i<N;i++)
// printf("%d ",Q[i]);
// printf("\n");
DFS(a,0);
for (int i=0;i<N;i++)
printf("%d ",Q[i]);
printf("\n");
return 0;
}