⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 鲍方-0604081015-八皇后问题.cpp

📁 自己收集的八皇后问题相关知识,有不少源代码,能解决八皇后问题
💻 CPP
字号:
#include <stdio.h>
#include <math.h>
#include <conio.h>//头文件调用

int c = 0;//统计八皇后摆放总数
int i = 0;//统计比较次数
void PrintTheChessBoard(int queens[], int n)//打印棋盘
{
    int i, j;//控制循环

     printf("NO.    %d     method.\n",c); //输出第num种摆法

    for (i = 0; i < n; i ++)//控制循环
    {
		
        for (j = 0; j < queens[i]; j ++)
        {
            printf("  *");//打印*
        }
        printf("  Q");//打印皇后
        for (j = n-1; j > queens[i]; j --)
        {
            printf("  *");//打印*
        };
        putchar('\n');//换行
    }
    printf("Please press enter to see the next answer\n\n");//按回车键输出下个方案
    getch();//从键盘获取字符

}


int CheckTheChessBoard(int queens[], int i)// 检查棋盘从第 0 行到第 i 行的布局是否合法。
{
    int j, k;

    for (j = 0; j <= i; j ++)//循环控制
    {   
        for (k = 0; k <= i; k ++)//循环控制
        {
            if (j != k && (queens[j] == queens[k]||abs(queens[j] - queens[k]) == abs(j - k)))
                                                                      //判断是否在对角线上
				                                                      //判断皇后是否在同一行
																	  //判断皇后是否在同一列上
            {
                return 0;//若在同一行,同一列或者同一对角线上,返回0
            }
        }
    }

    return 1;//若在同一行,同一列或者同一对角线上,返回1
}

void Trial(int queens[], int i, int n)//当判断八行皇后摆法格局都合法,则调用打印函数
{
    if (i >= n)//当判断皇后摆法都合法时,打印棋盘
    {
        c ++;
        PrintTheChessBoard(queens, n);//调用PrintTheChessBoard()函数,打印皇后
    }
    else
    {
        int j;

        for (j = 0; j < n; j ++)
        {
            queens[i] = j;//对queen数组从新赋值
            if(CheckTheChessBoard(queens, i))//调用CheckTheChessBoard函数,若返回数为1,就再次调用Trial函数
            {
                Trial(queens, i + 1, n);
            }
        }
    }
}

void main()
{  
	printf("The Queen number is Eight  \n\n");//定义问题是八皇后
    int queens[] = {-1, -1, -1, -1, -1, -1, -1, -1};//给queen数组赋初值
    Trial(queens, 0, 8);//调用Trial函数
    printf("There is %d answers for the 8 Queen question\n\n",c);
    getch();//从键盘获取字符
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -