首页 > 其他 > 详细

n皇后

时间:2015-03-21 21:12:15      阅读:272      评论:0      收藏:0      [点我收藏+]

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

 

n皇后

原文:http://www.cnblogs.com/ekinzhang/p/4356100.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!