zoukankan      html  css  js  c++  java
  • pat每日刷题计划--day66

    递归回溯八皇后复习

    注意反向斜线不能使用abs,1和-1对应的是不一样的线

    具体操作

    • 找边界,在边界停止回溯
    • 在判断可以走这一步后完成这一步标记,并进入下一循环
    • 下一循环结束以后(即函数表达式后面),把前面标记的东西改回来
    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    int n;
    int ans[100];
    bool hashTable[100];
    bool a[100];
    bool b[100];
    int countnum=0;
    void bhh(int num)
    {
        for(int x=1;x<=n;x++)
        if(hashTable[x]==false && a[x+num]==false && b[x-num+10]==false)
        {
            if(num==n)
            {
                countnum++;
                if(countnum<=3)
                {
                for(int i=1;i<=n-1;i++)
                {
                    printf("%d ",ans[i]);
                }
                printf("%d
    ",x);
                }
                return;
            }
            hashTable[x]=true;
            a[x+num]=true;
            b[x-num+10]=true;
            ans[num]=x;
            //cout<<"this part"<<endl;
            bhh(num+1);
            hashTable[x]=false;
            a[x+num]=false;
            b[x-num+10]=false;
        }
    }
    int main()
    {
        scanf("%d",&n);
        memset(hashTable,0,sizeof(hashTable));
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        bhh(1);
        printf("%d
    ",countnum);
        return 0;
    }
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    SpringCloud笔记(一)服务注册与发现
    个人备忘录
    ActiveMQ 消息持久化到Mysql数据库
    染色 [组合数 容斥]
    各种图床
    NOIP2012 疫情控制
    网格计数
    找钱 [多重背包 计数]
    序列[势能线段树]
    牛客挑战赛33 B-鸽天的放鸽序列
  • 原文地址:https://www.cnblogs.com/tingxilin/p/12212810.html
Copyright © 2011-2022 走看看