深度优先搜索的基本思想:
1.从图中某ge'd个顶点V0出发,首先访问V0.
2.找出刚访问过的顶点的第一个未被访问的邻接顶点,然后访问该顶点。以该顶点为新顶点,重复此步骤,直至刚访问过的顶点没有未被访问的邻接点为止。
3.返回前一个fang访问过的且仍有未被访问的邻接点的顶点,找出gai'该顶点的下一个未被访问的邻接点,访问该顶点,然后执行步骤 2.
算法思想:
首先shi'实现对V0所在联通子图的shen深度优先搜索,yong用递归算法实现
1.fang访问出发点V0;
2.yi'c依次以v0的未被访问的邻接点为出发点,深度优先搜索图,直至图中所有与V0有路径相通的顶点都被访问。
若是非连通图,则图中一定还有顶点未被访问,需要从途中另选一个未被访问的顶点作为起点,重复上述深度优先搜索过程。
#include <stdio.h>
#include <string.h>
int ans, temp, n, map[55][55], vis[55];
void dfs(int l)
{
ans++;
if (ans > n)
{
temp = 1;
return ;
}
vis[l] = 1;
printf("%d ", l);
for (int i = 0; i < n; i++)
{
if (map[l][i] && !vis[i])//map[l][i]为真代表i是l的邻接顶点
{
dfs(i);
if (temp)
return ;
}
}
}
int main()
{
while (~scanf("%d", &n))
{
temp = ans = 0;
memset(vis, 0, sizeof(vis));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
scanf("%d", &map[i][j]);
}
for (int i = 0; i < n; i++)
{
if (!vis[i])
dfs(i);
}
puts("");
}
return 0;
}
广度优先搜索的基本思想:
1.从图中某个定=顶点V0出发,首先访问V0;
2.依次访问V0的各个未被访问de'l的邻接点。
3.分别从这些邻接点(端点)出发,依次访问他们的ge'g各个未被访问的邻接点(新的端结点)。访问时应保证:如果Vi和Vk为当前端结点,且Vi在Vk之前被访问,则Vi的所有未被访问的邻接点应在Vk的所有未被访问的邻接点之前访问。重复3,直到所有端结点均没有未被访问的邻接点为止。
若此时还有顶点未顶点未被访问,则选一个未被访问的ding顶点作为起点,重复上述过程。
算法思想:
1.首先访问V0并置访问标志,然后将V0入队;
2.只要队不空,则重复下述处理:
a.队头结点V出队;
b.对所有的邻接点W,如果W未被访问,则访问W并置访问标志,然后将W入队.