DFS——八个皇后—N个皇后的总结

原创 2018年04月14日 22:12:27

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;
}

OpenSource的末日?

OpenSource的末日? 蓝森林 http://www.lslnet.com 2000年3月30日 09:18   Olaf Beckman在Linux.com写了一篇文章,阐述为什么他认为 OP...
  • Virtual
  • Virtual
  • 2001-01-12 11:57:00
  • 828

DFS——A:N皇后问题 解题报告

N皇后问题 Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对...
  • xp731574722
  • xp731574722
  • 2016-07-22 17:26:34
  • 336

牛客练习赛13F-m皇后

链接:https://www.nowcoder.com/acm/contest/70/F来源:牛客网题目描述在一个n*n的国际象棋棋盘上有m个皇后。 一个皇后可以攻击其他八个方向的皇后(上、下、左、右...
  • albertluf
  • albertluf
  • 2018-03-16 23:38:42
  • 39

再看八皇后问题

1、问题描述 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。   2、解法一 可以用一个一维数组来表示棋盘,seat...
  • Touch_2011
  • Touch_2011
  • 2011-11-25 20:03:37
  • 2792

经典DFS之N皇后问题

N皇后问题
  • dtxm123
  • dtxm123
  • 2016-07-23 08:57:09
  • 2173

N皇后问题(DFS)N皇后问题

这题是经典的DFS问题。 题意很清楚,任意两个皇后不能再同一行同一列,同一斜线上。如下图: 刚看到这题,我并不打算用一个二维数组处理行列,没有必要浪费空间,一维已足够解决该问题了。数组下标表示行,...
  • Coding_Or_Dead
  • Coding_Or_Dead
  • 2016-09-09 15:43:34
  • 754

1700_八皇后问题

/* Name: 1700_八皇后问题 Copyright: Author: Date: 13-07-17 19:34 Description: 1700_八皇后问题 查看 提交 统计 ...
  • QiaoRuoZhuo
  • QiaoRuoZhuo
  • 2017-07-15 15:52:15
  • 422

八皇后问题(递归+非递归)

一.问题描述 在8×8格的国际象棋棋盘上放置八个皇后,使得任意两个皇后不能互相攻击,即任何行、列或对角线(与水平轴夹角为45°或135°的斜线)上不得有两个或两个以上的皇后。这样的一个格局称为问...
  • judyge
  • judyge
  • 2015-05-05 23:08:30
  • 452

n皇后问题<dfs>

n皇后问题指的是: n*n的国际象棋棋盘上摆放n个皇后,使其不能互相攻击, 即任意两个皇后都不能处于同一行、同一列或同一斜线上, 问有多少种摆法。 和一般n皇后问题不同的是,现在棋盘上有可能已经放了...
  • M___er
  • M___er
  • 2016-05-08 14:55:21
  • 583

八皇后问题(DFS)

例题1:百练 2754 描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题...
  • xuzengqiang
  • xuzengqiang
  • 2012-02-21 16:53:28
  • 1810
收藏助手
不良信息举报
您举报文章:DFS——八个皇后—N个皇后的总结
举报原因:
原因补充:

(最多只允许输入30个字)