HDUOJ2553-N皇后问题

来源:互联网 发布:java将信息写入文件 编辑:程序博客网 时间:2024/06/03 03:30

对于N皇后问题首先的代码

#include <stdio.h>int IsLegal[3][25];int cnt = 0;int cmd;void Dfs(int n){    if (n == cmd + 1)        cnt++;    else {        for(int i = 1; i <= cmd; i++) {            if(IsLegal[0][i] == 0 && IsLegal[1][n+i] == 0 && IsLegal[2][n-i+8] == 0) {                IsLegal[0][i] = IsLegal[1][n+i] = IsLegal[2][n-i+8] = 1;                Dfs(n+1);                IsLegal[0][i] = IsLegal[1][n+i] = IsLegal[2][n-i+8] = 0;            }        }    }}int main(){    while (scanf("%d", &cmd) == 1 && cmd) {        Dfs(1);        printf("%d\n", cnt);                cnt = 0;        for (int i = 0; i < 3; i++) {            for (int j = 0; j < 25; j++) {                IsLegal[i][j] = 0;            }        }    }            return 0;}


但是在hduOJ上显示超时,也许是因为计算量太大。由于N <= 10,因此提前将各个答案写入一个表中。

int main()  {      int num[11];      for(n = 1; n <= 10; n++)      {          ans = 0;          dfs(1);          num[n] = ans;      }      while(scanf("%d",&n) != EOF && n) {           printf("%d\n",num[n]);      }      return 0;  }  


0 0
原创粉丝点击