zoukankan      html  css  js  c++  java
  • HDU 2553 N皇后问题(DFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553

    N皇后问题

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5171    Accepted Submission(s): 2357


    Problem Description
    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。

     
    Input
    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
     
    Output
    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
     
    Sample Input
    1 8 5 0
     
    Sample Output
    1 92 10
     
    Author
    cgf
     
    Source
     
    Recommend
    lcy
     
    搜索水题。。。。不过这题得打表,如果每次都搜索的话会超时。。。
     
     By LFENG
     
    #include<stdio.h>
    int s[12] = {010021044092352724};
    int main()
    {
        
    int n;
        
    while(scanf("%d", &n) != EOF && n)
            printf(
    "%d\n", s[n]);
        
    return 0;
    }
     
     
     
     By LFENG
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int n, sum;
    int g[12], ti[12];
    int check(int cur)
    {
        
    int i;
        
    for(i = 0; i < cur; i++)
            
    if(abs(cur - i) == abs(g[cur] - g[i]) || g[i] == g[cur])return 0;
        
    return 1;
    }
    void dfs(int cur)
    {
        
    int i, next;
        
    if(cur == n)
        {
            sum++;
            
    return ;
        }
        
    for(i = 0; i < n; i++)
        {
            g[cur] = i;
            
    if(!check(cur))continue;
            dfs(cur + 
    1);
        }
    }
    int main()
    {
        
    int num;
        
    for(n = 1; n <= 10; n++)
        {
            memset(g, 
    0sizeof(g));
            sum = 
    0;
            dfs(
    0);
            ti[n] = sum;
        }
        
    while(scanf("%d", &num) != EOF && num)
            printf(
    "%d\n", ti[num]);
        
    return 0;
    }
  • 相关阅读:
    racle wm_concat(column)函数的使用
    位运算应用口诀和实例
    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
    SQL触发器实例讲解
    编写更好的jQuery代码的建议
    Jquery插件开发学习
    Java中super的几种用法并与this的区别
    全面总结Java泛型
    Oracle统计函数之Lead
    VBscript读取excel表,中数据导入到SQLserver数据库里面
  • 原文地址:https://www.cnblogs.com/lfeng/p/3084787.html
Copyright © 2011-2022 走看看