1.图的深度优先搜索
基本思想:访问顶点v0,然后访问v0邻接到的未被访问的顶点v1,然后再从v1出发按照深度优先的顺序遍历
bool s[maxn]={false};
void dfs(int x)
{
s[x]=true; //标记当前节点已经被访问
printf("%d\n",x);
for(int i=head[x]; i!=-1; i=Edge[i].next)
//对于每个未被访问的相邻节点,用深搜。遍历返回后,尝试其他支路
if(!s[Edge[i].to]) dfs(Edge[i].to);
}
2.图的广度优先搜索
先遍历结点v0,然后访问v0邻接到的所有结点,再依次访问这些结点邻接到的未被访问的结点,依次进行下去,用队列来实现
void bfs(int x)
{
int queue[maxn];
int m=1;
queue[m++]=x;
for(int i=1; i<m; i++)
{
int tmp=queue[i];
//每次从队伍头取节点,一定是下一个待扩展点
printf("%d\n", tmp);
//遍历与当前节点相连的节点,如果没有被访问过,入队
for(int k=head[tmp]; k!=-1; k=Edge[k].next)
if(!s[Edge[k].to]) queue[m++]=Edge[k].to;
}
}
//图用的是链式前向星储存的
这个markdown编辑器真难用哟(^U^)ノ~YO