DFS 深度优先搜索

在读啊哈算法这本书,其中全排列的问题首次引出了深度优先搜索算法。然后按照书上的一个问题写的代码,老是输不出结果。问题是1,....,9两个三位数字相加等于另外三位数,把1到9全部用了。输出可能的组合。

#include<iostream.h>
int a[10],book[10];

void dfs(int step)
{
	int i;  //一开始放在全局位置的  输不出结果
	if(step==10)
	{
		if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9])
		{
			cout<<a[1]<<a[2]<<a[3]<<"+"<<a[4]<<a[5]<<a[6]<<"="<<a[7]<<a[8]<<a[9]<<endl;
		}
		return;
	}

	for(i=1;i<=9;i++)
	{
		if(book[i]==0)
		{
			a[step]=i;
			book[i]=1;
			dfs(step+1);
			book[i]=0;
		}
	}
	return;
}


void main()
{
	 dfs(1);

}
当然,这是正确的代码了,一开始的int i 放在全局位置,这样每次递归都是用的同一个i ,这是极其错误的。


猜你喜欢

转载自blog.csdn.net/yang332233/article/details/73719353