zoukankan      html  css  js  c++  java
  • C语言实现八皇后问题(回溯算法)

    心血来潮。,用C写下大学入门C语言时的经典算法。

    八皇后问题:在8*8格子里放八个皇后(棋子),使其不能互相攻击(八个棋子不能在同一行,同一列,或者同一斜线)

    核心思想:走不通,回头 。

    实现:递归,回溯

    代码实现如下:

    //
    //  main.c
    //  queen
    //
    //  Created by 南瓜不说话 on 2017/9/19.
    //  Copyright © 2017年 南瓜不说话. All rights reserved.
    //
    
    #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    
    int n;
    int arr[8];
    int x[8];
    int sum;
    
    int attack(int k) {
        for(int j=1;j<k;j++)
        if(k-j==abs(arr[j]-arr[k])||arr[j]==arr[k])
            return 0;
        return 1;
    }
    
    //void zx()
    //{
    //    x[1]=abs(x[1]);
    //}
    //
    void backStart(int k){
        if(k>n){
            for(int i=1;i<=n;i++)
                printf(" %d",arr[i]);
            printf("
    ");
            sum++;
        }else{
            for(int i=1;i<=n;i++ ){
                arr[k]=i;
                if(attack(k)){
                    backStart(k+1);
                }
            }
        }
    }
    
    int main(int argc, const char * argv[]) {
         n=8;
    //    arr;
        sum=0;
        backStart(1);
        printf("sum=%d
    ",sum);
        return 0;
    }

     问题:在windows下编译结果是正确的,在mac下,必须写zx()函数才编译正确,可能是我mac下C的库有问题,有待验证。。

  • 相关阅读:
    react 性能优化
    JS获取当前网页大小以及屏幕分辨率等
    创建对象的6种方式总结
    版本号规则
    JS事件模型
    浅谈虚拟DOM
    浏览器的回流与重绘
    JavaScript预编译
    canvas学习笔记
    java、tomcat安装
  • 原文地址:https://www.cnblogs.com/nanguabushuohua/p/7561294.html
Copyright © 2011-2022 走看看