n*n中选8个-->每行皇后选一列,用c[x]来存储列编号,枚举量为8!=40320

void search(int cur)
{
    if(cur == n)
       tot ++;
    else for(int i = 0; i < n; i ++)
    {
        int ok = 1;
        c[cur] = i;
        for(int j  = 0; j < cur; j++)
            if(c[j] == c[cur]||j+c[j] == cur+c[cur]||j-c[j] == cur-c[cur])
             {ok = 0;break;}
        if(ok)
            search(cur+1);

    }
}
View Code

牺牲空间提高效率

void search(int cur)
{
    if(cur == n)
       tot ++;
    else for(int i = 0; i < n; i ++)
    {
        if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
        {
            c[cur] = i;
            vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 1;
            search(cur+1);
            vis[0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 0;
        }
    }
}
View Code