字符串dfs

int visited[10]={0}; //做标记,n 个数需要做 n 个标记,没用过记作 0, 用过后记作 1 
char  lists[100];
void dfs(string str,int step)
{
	if(step==str.size()) 	//出口,说明前面所有层都做完了 
	{
		for(int i=0;i<str.size();i++)
			printf("%c",lists[i]);
		printf("\n");
	}
	else{
		for(int i=0;i<str.size();i++){	//枚举每一种可能 
			if(visited[i]==0){	//没用过 
				lists[step]=str[i];	//用它就把它存起来
				visited[i]=1;	//用过就标记,避免下面的搜索重复使用
				dfs(str,step+1);	//进入下一层 ,递归调用 
				visited[i]=0;	//取消标记,搜索行不通返回继续使用 
			}
		}
	}
}

上一篇:爬虫实战:汽车之家配置页面 破解伪元素和混淆JS


下一篇:八数码问题