从图中的某顶点V出发,访问此顶点,然后依次从V的各个未被访问的邻接点出发,深度优先搜索遍历图,如果发现不能到达目标解,就返回上一个节点,然后从另一条路开始走到底,直到图中所有与V路径想通的顶点都被访问到,这种尽量往深处走的概念既是深度优先搜索。
简略代码:
const int MAXN=1000+10;
需使用的变量:
vector<int> g[MAXN];//存储边
bool visited[MAXN];//是否被访问
void dfs(int x)
{
visited[x]=true;
//标记x被访问
for(int i=0;i<g[x].size();i++)
if(!visited[i])//如果i点未被访问则开始遍历
dfs(i);
//遍历x的相邻结点,若没被访问则从这个结点开始深搜遍历
}
int main()
{
for(int i=1;i<=MAXN;i++)
g[i].clear();
memset(visited,0,sizeof(visited));
//初始化清空g和visited数组
for(int i=1;i<=MAXN;i++)
if(!visited[i])
dfs(i);
//多个图深搜遍历
}