题目
八皇后问题

cpp
#include <bits/stdc++.h>
using namespace std;
int n;
int a[10][10];
int cnt;
void dfs(int,int);
void print();
bool panduan(int,int);
int main()
{
n = 8;
for(int i = 1;i<=n;i++)
{
a[1][i] = 1;
dfs(1,i);
a[1][i] = 0;
}
return 0;
}
void dfs(int x,int y)
{
if(x==8)
{
print();
return;
}
int tx = x+1;
int ty = 1;
for(ty = 1;ty<=n;ty++)
{
if(panduan(tx,ty)==true)
{
a[tx][ty] = 1;
dfs(tx,ty);
a[tx][ty] = 0;
}
}
return;
}
void print()
{
cnt++;
cout<<"No."<<cnt<<endl;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
bool panduan(int x,int y)
{
for(int i = 1;i<=n;i++)
{
if(a[i][y]==1&&i!=x) return false;
}
int i = x-1,j = y-1;
while(i>=1&&j>=1)
{
if(a[i][j]==1) return false;
i--;
j--;
}
i = x+1,j = y+1;
while(i<=n&&j<=n)
{
if(a[i][j]==1) return false;
i++;
j++;
}
i = x+1,j = y-1;
while(i<=n&&j>=1)
{
if(a[i][j]==1) return false;
i++;
j--;
}
i = x-1,j = y+1;
while(i>=1&&j<=n)
{
if(a[i][j]==1) return false;
i--;
j++;
}
return true;
}
棋盘问题

cpp
#include <bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
node(){};
node(int aaaaa,int bbbbb)
{
x = aaaaa;
y = bbbbb;
}
};
int n,k;
char a[10][10];
node b[1010];
int lb;
int cnt;
void dfs(int,int);
bool xuan(int,int);
int main()
{
cin>>n>>k;
while(n!=-1&&k!=-1)
{
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]=='#') b[++lb] = {i,j};
}
}
cnt = 0;
dfs(0,0);
cout<<cnt<<endl;
cin>>n>>k;
}
return 0;
}
void dfs(int v,int vb)
{
if(v==k)
{
cnt++;
return;
}
if(vb>=lb) return;
vb++;
dfs(v,vb);
if(xuan(b[vb].x,b[vb].y)==true)
{
a[b[vb].x][b[vb].y] = '@';
dfs(v+1,vb);
a[b[vb].x][b[vb].y] = '#';
}
return;
}
bool xuan(int xx,int yy)
{
for(int i = 1;i<=n;i++)
{
if(a[i][yy]=='@'||a[xx][i]=='@') return false;
}
return true;
}