设为首页 加入收藏

TOP

C语言实现N皇后问题非递归求解(二)
2018-03-02 06:57:25 】 浏览:498
Tags:语言 实现 皇后 问题 求解
p; //输出解的个数
}


int place(int i, int k, int *p)
{
    int m;


    for (m=0; m<k; m++)
    {
        if ((p[m]==i)||(abs(m-k)==abs(p[m]-i)))  //k+1行i列不是合法位置
            return (0);
    }


    return (1);  //k+1行i列是合法位置   
}


int find(int n, int *p, int k)
{
    int i;
    i=p[k];


    for (i++; i<=n; i++)
    {
        if (place(i, k, p)==1)  //在k+1行找到可放置皇后的列
            return (i);    //返回该列
    }
    return (0);  //在k+1行没有找到可放置皇后的列
}


void output(int n, int *p)
{
    int i, j;


    for (i=0; i<n; i++)
    {
        for (j=1; j<=n; j++)
        {
            if (j==p[i])
                printf("1 ");
            else
                printf("0 ");
        }
        printf("\n");
    }
    printf("\n");
}


附n皇后问题的递归代码:


该程序段为自己的创作(教科书上现成的代码没必要复制粘贴),意义不是很大,因为比较繁琐,当n<=8时能输出正确结果,n>8时直接STACKOVERFLOW,所以大家看看就好,并不实用


#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <stdlib.h>
void print(int n);
void put(int k, int n, int *q, int *p);
void output(int n, int *p);
int law(int k ,int i, int *p);


void main ()
{
    int n;
    printf ("you want to solve the problem of n queens the n=?\n");
    scanf ("%d", &n);
    print(n);
}


void print(int n)
{
    int number, i;
    int *p;
    number=0;
    p=(int *)malloc(n*sizeof(int));
    for (i=0; i<n; i++)
        *(p+i)=0;


    put(1, n, &number, p);


    printf("There are %d solutions in total\n", number);
    free(p);
}
void put(int k, int n, int *q, int *p)
{
    int i;
    if (k==1)
    {
        (*p)++;
        if ((*p)>n)
            return;
        put(k+1, n, q, p);
    }
    else
    {
        i=*(p+k-1);
        i++;
        while (i<=n)
        {
            if (law(k, i, p))
            {
                *(p+k-1)=i;
                if (k==n)
                {
                    (*q)++;
                    printf ("The %dnd solution\n", *q);
                    output(n, p);
                    put(k, n, q, p);
                }
                else
                {
        &nb

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言重解经典回溯算法案例-迷宫.. 下一篇Python读取大文件的实现方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目