zoukankan      html  css  js  c++  java
  • N 皇后问题

    因为只有十组数据 , 为防止 一数据出现多次导致超时所以 打表

    还是 挺简单的....

     1 /* 
     2         就是考虑皇后放置的位置,对于每一行,我们需要枚举每个可以放置皇后的位置,
     3         而且需要判断当前位置(第i行)是否满足条件,即判断这个位置是否与放置好的前i-1行的皇后的位置相冲突,
     4         如果冲突,说明这个位置不合适;否则的话,就可以枚举下一行皇后的位置,直至第n行。
     5 */
     6 #include<stdio.h>
     7 #include<string.h>
     8 
     9 int n,tmp;
    10 int map[11];
    11 
    12 void DFS(int k)
    13 {
    14     int i,j,flag;
    15     if(k==n+1)
    16     {
    17         tmp++;
    18         return;
    19     }
    20     else
    21     {
    22         for(i=1;i<=n;++i)
    23         {
    24             map[k]=i;
    25             flag=1;
    26             for(j=1;j<k;++j)
    27             {
    28                 if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)   // 注:1、i=map[k]  2、不在同一条斜线的两点的含义是行标到对角线的的距离不相等
    29                 {
    30                     flag=0;
    31                     break;
    32                 }
    33             }
    34             if(flag)
    35                 DFS(k+1);
    36         }
    37     }
    38 }
    39 
    40 int main()
    41 {
    42     int i,m;
    43     int ans[11];
    44     for(n=1;n<=10;++n)
    45     {
    46         tmp=0;
    47         DFS(1);
    48         ans[n]=tmp;
    49     }
    50     while(scanf("%d",&m),m)
    51     {
    52         printf("%d
    ",ans[m]);
    53     }
    54     return 0;
    55 }

    关键就是 已用 行列的 记录和表达

  • 相关阅读:
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    团队现场编程实战(抽奖系统)
    Alpha 冲刺 (4/10)
    斗地主
    解方程
    货币系统
  • 原文地址:https://www.cnblogs.com/A-FM/p/5264233.html
Copyright © 2011-2022 走看看