從圖中的某頂點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);
//多個圖深搜遍歷
}