深度优先搜索的基本模型:
void dfs(int step)
{
判断边界
尝试每一种可能for(i=1;i<=n;i++)
{
继续下一步 dfs(step+1);
}
返回
}
任务:深度优先搜索,把1-n放入n个盒子里,有几种放法*
C实现
#include<stdio.h>
int n,book[10],a[10];
void dfs(int step)
{
int i;
if(step==n+1)
{
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1); //继续搜索直到完成一种放法
book[i]=0; //归零才能进行下一次尝试
}
}
return;
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
python实现
def depth_first_box(step):
if step == n+1:
for i in range(1, n+1):
print(lists[i], end=' ')
print('\n')
return
for j in range(1, n+1):
if book[j]==0:
book[j]=1
lists[step]=j
depth_first_box(step+1)
book[j]=0
return
if __name__=='__main__':
lists = [0] * 11
book = [0] * 11
n = int(input("输入n:"))
depth_first_box(1)