模板与入门例题
模板:
搜索这东西,没模板的日子不好过啊……
(不会同时写两个代码块,只好截个图了)
示例题:
题目描述:今天,桐桐的老师布置了一道数学作业,要求列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字。因为排列数很多,桐桐害怕写漏了,所以她决定用计算机编程来解决。
输入只有一个整数n(1≤n≤9)。
输出按字典序输出由1~n组成的所有不重复的数字序列,每行一个序列,每个数字之间有一个空格。
样例输入:
3
样例输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include <bits/stdc++.h>
using namespace std;
int a[10],v[10]={0},n;
void dfs(int u)
{
if(u==n)//到达终点
{
for(int i=1;i<=n;i++)
{
if(i==n) printf("%d",a[i]);
else printf("%d ",a[i]);
}
printf("\n");
return;
}
for(int i=1;i<=n;i++)//扩展方式
{
if(v[i]==0)
{
v[i]=1;//标记
a[u+1]=i;
dfs(u+1);
v[i]=0;//回溯(如果对后续有影响,则需要回溯,不一定每个题里都要“回溯”)
}
}
return;
}
int main()
{
scanf("%d",&n);
dfs(0);//从0开始深搜
return 0;
}