简单的dfs入门例子
因为最近在做poj的题目。
刚好到1013题时候碰见stick问题。故看了下dfs方法
第一行是输入n个长度不同的小木枝条;第二行是每个小枝条的长度;第三行是让程序判断这些长度不同的小枝条能否组合成这个长度. 能输出ok,不能输出no
输入:
4
4 3 2 1
7
输出:
ok
这种方法很明显要对所有情况都要列出 即穷举
暴力解法dfs.
由于是入门,不考虑减枝(优化代码)的情况....
dfs(int i,int length) // i为各个不同小枝条的编号, length为组合出的长度。
{
if(i<n && vis[i]) // vis[n] 标记第n条小树枝的使用情况。 用到了为1 没用为0
{
vis[i]=1; //现在用到了。
if(length+a[i]==goal) //长度刚好和目标相同
return ok=1;
else if(length+a[i]=<goal) //长度小于目标长度 继续dfs
{
dfs(i+1,length); //舍弃a[i] 从[i+1]开始找
dfs(i+1,length+a[i]); //不舍弃a[i] 从[i+1]开始找
}
else
{
dfs(i+1,length); //因为a[i]明显大了,故舍弃a[i] 从[i+1]开始找
}
vis[i]=0; //回溯
}
}
通过这个简单的小例子,基本能明白了dfs的简单运用。

浙公网安备 33010602011771号