简单全排列问题:
#include <iostream>
using namespace std;
int n,path[N]; bool str[N];
void dfs(int u)
{
if(u==n){ for(int i=0;i<n;i++) printf("%d",path[i]) }
for(int i =0;i<n;i++)
{
if(!str[i]){path[u]=i; str[i]=true; dfs(u+1); str[i]=false;}
}
return;
}
int main()
{
dfs(0);
return 0;
}
n-皇后问题:
NO.1
#include <iostream>
using namespace std;
N;path[N][N],bool shu[N],xie[N],uxie[N];
void dfs(int u)
{
if(u==n)for(int x:path)cout<<x;
for(int i =0;i<n;i++)
if(!shu[u] && !xie[u+i] && !uxie[n-u+i])
{
path[u][i]=q;
shu[u]=xie[u+i]=uxie[n-u+i]=true;
dfs(u+1);
shu[u]=xie[u+i]=uxie[n-u+i]=false;
path[u][i]='.';
}
}
NO.2:
void dfs(int x;int y;int s)
{
if(y==n)y=0,x++;
if(x==n)
{
if(s==n)
for(int p:h)cout<<p;
}
dfs(x,y+1,s);
for(int i = 0;i<n;i++)
if(!shu[u]&&!hen[i]&&!xie[u+i]&&!uxie[n-u+i])
shu[u]=hen[i]=xie[u+i]=uxie[n-u+i]=true;
dfs(x,y+1,s+1);
shu[u]=hen[i]=xie[u+i]=uxie[n-u+i]=false;
}