算法实验一 【穷举n位二进制数】(回溯算法)
1323.穷举n位二进制数
时限:100ms 内存限制:10000K 总时限:300ms
描述
输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入
输入一个小于20的正整数n。
输出
按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入样例
3
输出样例
000
001
010
011
100
101
110
111
#include<iostream>
using namespace std;
int n;
int a[20];
void dfs(int m);
int main()
{
cin>>n;
dfs(0);
return 0;
}
void dfs(int m)
{
int i;
if(m==n)
{
for(i=0;i<m;i++)
cout<<a[i];
cout<<endl;
}
else
{
a[m]=0;
dfs(m+1);
a[m]=1;
dfs(m+1);
}
}
10.16算法复习
这道题的回溯算法相当于一个哈夫曼树的回溯,但是现在只有树,树上没有0/1值,所以要自己赋0/1值。就是代码里面对a[m]的赋值。
值得注意的是换行操作,因为在输出的时候是输出数组的数使之成为一个集合在一起的数,因此换行的时候要在循环输出数组值之后cout一个换行。
整个函数相当于从000…(n位0)开始进行加一操作,并把每次加一操作得到的值都输出。