zoukankan      html  css  js  c++  java
  • hdu 2553 N皇后问题(一维数组详尽解释)

    //一维数组解法(注释详尽)
    //num皇后可以表示第num列,然后枚举num皇后所在的行
    //二维数组对角线转换为坐标的关系
    #include<stdio.h> #include<string.h> int map[15],hang[15],ans[15]; int n,cnt; void Dfs(int num) { int i,j,k; if(num>n) { cnt++; return ; } for(i=1;i<=n;i++) { map[num]=i;//第num的皇后在第num列i行 if(!hang[i])//枚举第i行是否可行 { for(j=1;j<num;j++)//枚举前num-1个皇后 {//num就代表列,map[num]就代表num所在的行 if(map[num]-num==map[j]-j||map[num]+num==map[j]+j) break; } if(j==num) { hang[i]=1; Dfs(num+1); hang[i]=0; } } } } int main() { int m; for(n=1; n<11; n++) { memset(hang,0,sizeof(hang)); memset(map,0,sizeof(map)); cnt=0; Dfs(1); ans[n]=cnt; } while(scanf("%d",&m)!=EOF&&m) { printf("%d ",ans[m]); } return 0; }

    单纯二维坐标做法:

    #include <stdio.h>
    #include <string.h>
    int count[15];//n的最大范围是10,打表!
    int k,cal;//k个大小的棋盘放的数目
    int map[15][15];//棋盘
    int dfs(int row,int column)
    {
        //最后一行也合适,放置数目加1
        if(row>k)
        {
            cal++;
            return 1;
        }
        //判断同一列是否有棋子
        for(int i=1; i<row; i++)
            if(map[i][column])
                return 0;
        //判断左上45度是否有棋子
        for(int i=row-1,j=column-1; i>0&&j>0; i--,j--)
            if(map[i][j])
                return 0;
        //判断右上45度是否有棋子
        for(int i=row-1,j=column+1; i>0&&j<=k; i--,j++)
            if(map[i][j])
                return 0;
        //都通过,该点合适并判断下一行
        map[row][column]=1;
        for(int i=1; i<=k; i++)
        {
            //当dfs(row+1,i,k)为1时,改行为最后一行,棋盘已放满
            if(dfs(row+1,i))
                break;
        }
        map[row][column]=0;
        //该点判断完成,恢复后再去判断其他点
        return 0;
    }
    int main()
    {
        int n;
        for(k=1; k<=10; k++)
        {
            memset(map,0,sizeof(map));
            cal=0;
            //count[k]=0;
            for(int i=1; i<=k; i++)
            dfs(1,i);
            count[k]=cal;
        }
        while(scanf("%d",&n)!=EOF&&n)
            printf("%d
    ",count[n]);
        return 0;
    }
    View Code
  • 相关阅读:
    使用 HttpClient 调用第三方接口
    Servlet 的生命周期及工作原理
    SpringBoot 框架简介及搭建
    使用 SimpleDateFormat 获取上个月的日期
    LoadRunner常见问题(一)
    Web_reg_find()函数的使用
    IEtester调试IE6,IE7,IE8,IE9的CSS兼容性的免费工具
    web_find()函数检查中文字符串失败的处理方法
    lr_shoami()的用法
    IP欺骗经验总结
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3330774.html
Copyright © 2011-2022 走看看