学习深度优先搜索笔记
深度搜索基本模型
Void dfs(int step)
{
判断边界
尝试每一种可能 for(i=1;i<=n;i++)
{
继续下一步 dfs(step+1);
}
返回
}
例题
排列1~n个数字
#include <iostream>
#include <Windows.h>
using namespace std;
int book[1000], a[10], n;//使book数组初始值为0
void dfs(int step);
int main()
{
while (cin >> n)//输入n必须要在1~9之间
{
system("cls");
dfs(1);//表示从第一个位置开始
}
return 0;
}
void dfs(int step)//step表示在第step个位置前
{
int i;
if (step == n + 1)//如果在n+1个位置,则说明前面已经排列完成
{
for (i = 1; i <= n; i++)
cout << a[i];
cout << endl;
return;//返回最近调用dfs函数的地方
}
for (i = 1; i <= n; i++)
{
if (book[i] == 0)//搜索没有被占用的数字
{
a[step] = i, book[i] = 1;
dfs(step + 1);
book[i] = 0;//将已经排列的数字的数字状态变成未使用状态以便下次排列
}
}
return;
}