标题:求大神帮忙!怎样将原来的统计个数变成输出棋盘或者输出坐标啊!
只看楼主
wzymmzs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-28
结帖率:0
 问题点数:0 回复次数:0 
求大神帮忙!怎样将原来的统计个数变成输出棋盘或者输出坐标啊!
由n2个方块排成n行n列的正方形称为“n元棋盘”。如果两个皇后位于n元棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。要求输出使n无棋盘上的n个皇后互不攻击的所有布局。
  具体要求如下;
  (1)n可由键盘输入。
  (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该
存储空间。
  (3)分别用n=4,5,6运行你的程序。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"

/**//* 记录当前的放置方案 */
int *x;
/**//* 皇后的个数N 和 方案数目 */
int n,sum=0;
/**//* 检查参数所指示的这一行皇后放置方案是否满足要求 */
int  Place(int);
/**//* 递归方法求取皇后放置方案*/
void Queen1(void);
/**//* 用户递归求取皇后放置方案的递归方法 */
void TraceBack(int);
/**//* 打印当前成功的放置方案 */
void PrintMethod(void);

void main(void)
{
    long start,stop;
    printf("input n: ");
    scanf("%d",&n);
    x=(int *)malloc(sizeof(int)*n);
    Queen1();
    printf("\nmethod total %d \n",sum);
}

int Place(int r)
{
    int i;
    for(i=0;i<r;i++){
        if(x[r]==x[i] || abs(r-i)==abs(x[r]-x[i]))
            return 0;
    }
    return 1;
}

void TraceBack(int r)
{
    int i;
    if(r>=n){
        sum++;
        /**//* PrintMethod(); */
    }else{
        for(i=0;i<n;i++){
            x[r]=i;
            if(Place(r)) TraceBack(r+1);
        }
    }
}



void Queen1(void)
{
    TraceBack(0);
}

怎样将原来的统计个数变成输出棋盘或者输出坐标啊!
搜索更多相关主题的帖子: 皇后 include 对角线 正方形 
2012-11-28 19:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-388884-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.250469 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved