いくつかの一般的なDFSテンプレート

vから始めて最後まで行けるかどうかを判別

bool dfs(v){
	if(v is 终点)return true;
	if(v is 旧点)return false;
	
	将v标记为旧点;
	对和v相邻的每个节点u{
		if(dfs(u)==true)return true; 
	} 
	return false;
}
int main() {
	所有点都标记为新点;
	起点=~;
	终点=~;
	cout<<dfs(起点)<<endl; 
	return 0;
}

パスを見つける

//寻找一条路径
Node path [MAX_LEN];//MAX_LEN取节点总数 
int depth;
bool dfs(v){
	if(v为终点){
		path[depth] = v;
		return true;
	} 
	if(v为旧点)return false;
	
	将v标记为旧点;
	path[depth]=v;
	++depth ;
	对和v相邻的每个节点u{
		if(dfs(u))return true;
	} 
	--depth;
	return false;
}
//寻找多条路径 
void dfs_1(v){
	if(v为终点){
		path[depth] = v;
		for(int i = 0;i <= depth;i++)
			cout<<path[i]<<endl;
		return ;
	} 
	if(v为旧点)return;
	
	对和v相邻的每个节点u{
		将v标记为旧点;
		path[depth]=v;
		++depth ;
		dfs(v);
		--depth;
	} 
	return;
}
int main(){
	将所有点都标记为新点;
	depth = 0;
	if(dfs(起点)) {
		for(int i = 0;i <= depth;i++)
			cout<<path[i]<<endl;
	}
}

グラフ上のすべてのポイントをトラバースします

dfs(v)(
	if(v是旧点)return;
	
	将v标记为旧点;
	对和v相邻的每个点u{
		dfs(u); 
	} 
)
int main(){
	将所有点都标记为新店;
	while(在图中能找到新点k) dfs(k); 
} 

おすすめ

転載: www.cnblogs.com/yifeianyi/p/12710116.html