深度优先搜索解决八皇后问题的时间复杂度 要怎么看啊


#include 
using namespace std;
#define MAX 8
int arr[MAX][MAX];
int num=0;

bool place(int i, int j)        //判断第i行第j列能不能放皇后
{
    for (int m = 0; m < 8; m++)
    {
        if (arr[m][j] == 1)
            return false;            //判断第j列的0-7行有没有放皇后
    }
    for (int x= 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            if (abs(x - i) == abs(y - j) && arr[x][y] == 1)        
                return false;
        }
    }
    return true;
}
void DFS(int v)        /7代表摆放第v个皇后
{
    int i, j;
    int flag = 1;
    if (v ==MAX)
    {
        num ++;
        return;
    }
    else 
    {
        for (i = 0; i < 8; i++)
        {
            if (arr[v][i])
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            for (j = 0; j < 8; j++)
            {
                if (place(v, j))
                {
                    arr[v][j] = 1;
                    DFS(v + 1);
                    arr[v][j] = 0;
                }
            }
        }
        else
        {
            DFS(v + 1);
        }
    }
}
int main()
{
    int i, j;
    for (i = 0; i < 8; i++)
    {
        for (j = 0; j < 8; j++)
            cin >> arr[i][j];
    }
    DFS(0);
    cout << num << endl;
    return 0;
}

这没有什么时间复杂度,所谓时间复杂度,你要有一个问题规模变量n,比如说n皇后问题,那么才可以讨论时间复杂度
8皇后问题,问题规模固定死了,那么时间就是一个常量,常量有什么复杂度。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7807510
  • 你也可以参考下这篇文章:八皇后问题详细分析
  • 除此之外, 这篇博客: 深度优先搜索之八皇后问题中的 问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题[百度百科]。
    英文:Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.
    在这里插入图片描述