全排列
#include<cstdio>
#include<iostream>
using namespace std;
int n;
int a[10],vis[10];
void dfs(int x){
if(x>n){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
a[x]=i;
vis[i]=1;
dfs(x+1);
vis[i]=0;
}
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
迷宫问题
#include<iostream>
using namespace std;
int dx[8]={1,0,-1,0,1, 1, -1,-1};
int dy[8]={ 0, 1,0,-1,1,-1,1,-1};
int maz[100][100];
int n,m,ans;
void dfs(int x,int y){
if(x==n && y==n){
ans++;
return ;
}
for(int i=0;i<8;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>0 &&xx<=n &&yy>0 &&yy<=n &&maz[xx][yy]==0){
maz[xx][yy]=1;
dfs(xx,yy);
maz[xx][yy]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>maz[i][j];
}
}
maz[1][1]=1;
dfs(1,1);;
cout<<ans;
return 0;
}
数的拆分
#include<iostream>
using namespace std;
int a[1000];
int n;
void dfs(int x,int y){
if(y==0){
for(int i=1;i<x-1;i++)
cout<<a[i]<<'+';
cout<<a[x-1]<<endl;
return ;
}
for(int i=a[x-1];i<=y;i++){
a[x]=i;
if(i!=n){
dfs(x+1,y-i);
}
}
}
int main(){
cin>>n;
a[0]=1;
dfs(1,n);
return 0;
}