1.八個皇后(指定n=8),輸出所有可能擺放的個數
代碼:
//
// main.cpp
// DFS——八個皇后自己寫
//
// Created by showlo on 2018/4/14.
// Copyright © 2018年 showlo. All rights reserved.
//
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int a[15];
int num;
int dfs(int k){
int flag;
if (k==9) {
num++;
return 0;
}
else{
for(int i=1;i<=8;i++)
{
flag=1;
a[k]=i;
for (int j=1; j<k; j++) {
if (a[j]==i||(abs(j-k)==abs(a[j]-i)))
{flag=0;
break;
}
}
if (flag) {
dfs(k+1);
a[k]=0;
}
}
}
return num;
}
int main() {
int ans;
memset(a, 0, sizeof(a));
num=0;
ans=dfs(1);
printf("%d\n",ans);
return 0;
}
2.八個皇后,輸出皇后位置表(Q代表皇后,#代表空)
代碼:
//
// main.cpp
// DFS——八個皇后(可輸出皇后的位置)
//
// Created by showlo on 2018/4/14.
// Copyright © 2018年 showlo. All rights reserved.
//
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int a[15];
int num;
int dfs(int k){
int flag,i,j;
if (k==9) {
num++;
printf("Case %d:\n",num);
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
if (a[j]==i) {
printf("Q");
}
else
printf("#");
}
printf("\n");
}
return 0;
}
else{
for(i=1;i<=8;i++)
{
flag=1;
a[k]=i;
for (j=1; j<k; j++) {
if (a[j]==i||(abs(j-k)==abs(a[j]-i)))
{flag=0;
break;
}
}
if (flag) {
dfs(k+1);
a[k]=0;
}
}
}
return num;
}
int main() {
int ans;
memset(a, 0, sizeof(a));
num=0;
ans=dfs(1);
printf("%d\n",ans);
return 0;
}
3.N個皇后,輸出皇后位置表
代碼:
//
// main.cpp
// DFS——N個皇后(自己寫)
//
// Created by showlo on 2018/4/14.
// Copyright © 2018年 showlo. All rights reserved.
//
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int a[1000];
int num,n;
int dfs(int k){
int flag,i,j;
if (k==n+1) {
num++;
printf("Case %d:\n",num);
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
if (a[j]==i) {
printf("Q");
}
else
printf("#");
}
printf("\n");
}
return 0;
}
else{
for(i=1;i<=n;i++)
{
flag=1;
a[k]=i;
for (j=1; j<k; j++) {
if (a[j]==i||(abs(j-k)==abs(a[j]-i)))
{flag=0;
break;
}
}
if (flag) {
dfs(k+1);
a[k]=0;
}
}
}
return num;
}
int main() {
int ans;
while (scanf("%d",&n)!=EOF&&n) {
memset(a, 0, sizeof(a));
num=0;
ans=dfs(1);
printf("%d\n",ans);
}
return 0;
}