面试题目

八皇后

#include <stdio.h>
#include <math.h>
#include <string.h>
int x[11], num;
bool Place(int k)
{
    int i = 1;
    while (i < k)
    {
        if (x[i] == x[k] || fabs(x[i] - x[k]) == fabs(i - k))
            return false;
        i = i + 1;
    }
    return true;
}
void Print(int x[], int n)
{
    printf("case%d:\n", ++num);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (j != 1)
                printf(" ");
            if (j == x[i])
                printf("1");
            else
                printf("0");
        }
        printf("\n");
    }
}
void NQueens(int n)
{
    int k = 1;
    x[1] = 0;
    while (k > 0)
    {
        x[k] += 1;
        while (x[k] <= n && !Place(k))
            x[k] += 1;
        if (x[k] <= n)
        {
            if (k == n)
                Print(x, n);
            else
            {
                k = k + 1;
                x[k] = 0;
            }
        }
        else
            k--;
    }
}
int main()
{
    int n, f = 0;
    while (scanf("%d", &n), n != -1)
    {
        if (f)
            printf("\n");
        num = 0;
        memset(x, 0, sizeof(x));
        NQueens(n);
        printf("There are %d kinds of\n", num);
        f = 1;
    }
}

一个序列,求位置。这个位置左边的数比他小,右边的比他大

这个需要搞个数组记录下,最远到哪里

 

posted @ 2019-11-16 10:46  暴力都不会的蒟蒻  阅读(176)  评论(0编辑  收藏  举报