最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

算法分析N后问题

来源:动视网 责编:小OO 时间:2025-09-26 05:34:11
文档

算法分析N后问题

算法分析—多皇后问题实验内容:N后问题,即在N×N的棋盘上,要放上N个皇后,使得他们两两不在同一条直线上和一条斜线上。实验要求:用回溯法或迪杰斯特拉算法实现N皇后问题实验源代码:#include"stdio.h"#include"windows.h"intN;intplace(intk);voidbacktrack(inti);voidchessboard();staticintsum,x[100];intmain(){printf("请输入你的皇后数目:");scanf("%d",&N);b
推荐度:
导读算法分析—多皇后问题实验内容:N后问题,即在N×N的棋盘上,要放上N个皇后,使得他们两两不在同一条直线上和一条斜线上。实验要求:用回溯法或迪杰斯特拉算法实现N皇后问题实验源代码:#include"stdio.h"#include"windows.h"intN;intplace(intk);voidbacktrack(inti);voidchessboard();staticintsum,x[100];intmain(){printf("请输入你的皇后数目:");scanf("%d",&N);b
算法分析—多皇后问题

实验内容:

N后问题,即在N×N的棋盘上,要放上N个皇后,使得他们两两不在同一条直线上和一条斜线上。

实验要求:

用回溯法或迪杰斯特拉算法实现N皇后问题

实验源代码:

#include "stdio.h" 

#include "windows.h" 

int N; 

int place(int k); 

void backtrack(int i);

void chessboard(); 

static int sum, x[100]; 

int main() 

    printf("请输入你的皇后数目:");

    scanf("%d",&N);

    backtrack(0); 

    system("pause"); 

    return 0; 

int place(int k) 

{

for (int j = 0; j < k; j ++)

        if (abs(k - j) == abs(x[j] - x[k]) || (x[j] == x[k])) 

            return 0; 

    return 1; 

void backtrack(int t) 

{

    if (t == N) chessboard(); 

    else 

     for (int i = 0; i < N; i ++) {

            x[t] = i; 

            if (place(t)) 

                backtrack(t + 1); 

        } 

void chessboard() 

    printf("第%d种解法:\\n", ++ sum); 

for (int i = 0; i < N; i ++) {

     for (int j = 0; j < N; j ++)

            if (j == x[i]) printf("@ "); 

            else printf("* "); 

            printf("\\n"); 

    } 

    printf("\\n"); 

}

实验结果:

1、运行代码输入皇后数目为2,由于不可能存在满足条件的皇后使得它们既不在同一直线上也不在同一斜线上,所以程序直接运行到结束找不到符合条件的解。

2、输入皇后数目为4时可以找到两种解,打印出结果如下图所示。

3、输入皇后数目为5时,也有解并打印结果。

4、当皇后数目为8时,就是我们经常说的8皇后问题,得到92种解法。

实验小结:

N后问题,是我们经常说的一类算法问题,也是一种益智的游戏,在我们日常生活中接触比较多的就是8皇后问题。在这个问题的解决过程中主要就是保证两个条件,任意两个皇后既不在同一直线上,也不在同一斜线上,不再同一直线上,我们可以理解为在N×N的棋盘上,每一行都有一个皇后,每一列也都有一个皇后,而不在同一斜线上我们则可以利用斜率来计算,由于在同一斜线上时它们两个的连线的与水平线的夹角为450 因此,他们在行上相差的格数和在列上的相等,利用这一点我们可以来判断两个皇后究竟是不是满足条件的。在具体实践时,我们可以先试探,在不符合条件时进行回退。最终实现这一问题。

通过本次实验,编程实现了对N后问题的解决,也更清楚的了解了该问题解决的具体过程,对要求的算法有了更好的了解。

文档

算法分析N后问题

算法分析—多皇后问题实验内容:N后问题,即在N×N的棋盘上,要放上N个皇后,使得他们两两不在同一条直线上和一条斜线上。实验要求:用回溯法或迪杰斯特拉算法实现N皇后问题实验源代码:#include"stdio.h"#include"windows.h"intN;intplace(intk);voidbacktrack(inti);voidchessboard();staticintsum,x[100];intmain(){printf("请输入你的皇后数目:");scanf("%d",&N);b
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top