首页 > 其他分享 >洛谷题单指南-搜索-P1219 [USACO1.5] 八皇后 Checker Challenge

洛谷题单指南-搜索-P1219 [USACO1.5] 八皇后 Checker Challenge

时间:2024-03-04 16:23:17浏览次数:20  
标签:平行线 USACO1.5 int 洛谷题 Challenge 摆放 棋子 bool flag1

原题链接:https://www.luogu.com.cn/problem/P1219

题意解读:八皇后,经典回溯问题。

解题思路:

逐行摆放棋子,关键在于如何快速判断行、列、正斜(左上到右下)、反斜(右上到左下)方向没有已放其他棋子

1、由于逐行摆放,因此行不需要判断

通过一个bool col[N]数组即可判断列上是否已摆放其他棋子

2、反斜方向以及其平行线上的行、列坐标有一个规律:x + y是一个固定的值,范围在2~2*N之间

通过一个bool flag1[2*N]数组即可判断反斜方向是否已摆放其他棋子

3、正斜方向以及其平行线上的行、列坐标有一个规律:x - y是一个固定的值,范围在1-N~N-1之间,为了修正负值,可以x - y + N,得到1~2*N-1之间的固定值

通过一个bool flag2[2*N]数组即可判断正斜方向是否已摆放其他棋子

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 20;

int a[N], n, cnt;
bool col[N], flag1[2 * N], flag2[2 * N]; //col:列是否被占 flag1:反向对角线的平行线是否被占 flag2:正向对角线的平行线是否被占

//填第k行
void dfs(int k)
{
    if(k > n)
    {
        if(cnt < 3)
        {
            for(int i = 1; i <= n; i++) cout << a[i] << " ";
            cout << endl;
        }
        cnt++;
        return;
    }

    for(int i = 1; i <= n; i++)
    {
        if(col[i] || flag1[k + i] || flag2[k - i + n]) continue;
        a[k] = i;
        col[i] = true; flag1[k + i] = true; flag2[k - i + n] = true;
        dfs(k + 1);
        col[i] = false; flag1[k + i] = false; flag2[k - i + n] = false;
    }
}

int main()
{
    cin >> n;
    dfs(1);
    cout << cnt;

    return 0;
}

 

标签:平行线,USACO1.5,int,洛谷题,Challenge,摆放,棋子,bool,flag1
From: https://www.cnblogs.com/jcwy/p/18052053

相关文章

  • 洛谷题单指南-二分查找与二分答案-P3743 kotori的设备
    原题链接:https://www.luogu.com.cn/problem/P3743题意解读:设备使用的时间越久,需要充电的总时间也越多,具备单调性,根据使用的时间,计算需要充电的时间,如果充电总时间<=使用的时间,说明有电量还能富余,使用时间还可以更多,因此只需对使用时间进行二分即可。解题思路:给定设备使用的时间......
  • 洛谷题单指南-二分查找与二分答案-P1163 银行贷款
    原题链接:https://www.luogu.com.cn/problem/P1163题意解读:利率越小,贷款期限和每个月还的钱固定的情况下,越有可能能够还完全部的贷款,具备单调性,因此给定贷款利率、贷款月数、每月还款钱数,可以计算最终贷款还剩下多少,有两种情况:>=0,说明利率可能大了,要试探更小利率;<0,说明利率小了,要......
  • 洛谷题单指南-二分查找与二分答案-P1182 数列分段 Section II
    原题链接:https://www.luogu.com.cn/problem/P1182题意解读:每段和的最大值越小,则分段数就越多,因此可以通过给定每段和的最大值,将分段数划分为两类:<=M,>M,对每段和的最大值进行二分即可。解题思路:二分的判定条件为,给定每段和的最大值,计算分段数,计算逻辑如下:依次遍历每一个数,求当前......
  • 洛谷题单指南-二分查找与二分答案-P3853 [TJOI2007] 路标设置
    原题链接:https://www.luogu.com.cn/problem/P3853题意解读:相邻路标的最大距离即空旷指数,空旷指数越小,用的路标越多,因此可以根据空旷指数将使用路标情况分成两类:路标数<=K,路标数>K,对空旷指数进行二分即可。解题思路:二分的判定条件为,给定空旷指数,计算需要的路标数只需遍历每两......
  • 洛谷题单指南-二分查找与二分答案-P2678 [NOIP2015 提高组] 跳石头
    原题链接:https://www.luogu.com.cn/problem/P2678题意解读:最短跳跃距离越大,要移走的石头就越多,因此可以根据最短跳跃距离的不同把情况分为两类:移走的石头数<=M、移走的石头数>M,对最短跳跃距离二分即可。解题思路:二分的判定条件如下:对于给定最短跳跃距离,需要计算移走的石头数,......
  • 洛谷题单指南-二分查找与二分答案-P2440 木材加工
    原题链接:https://www.luogu.com.cn/problem/P2440题意解读:切出来的长度越短,则段数越多,可以通过二分长度来解决。解题思路:二分的关键在于判定条件,此题就是对二分到的长度计算可以切割的段数,如果段数大于等于k,则满足要求,可以继续加大长度。注意点:1、计算切割出来的段数是累加:每......
  • 洛谷题单指南-二分查找与二分答案-P1678 烦恼的高考志愿
    原题链接:https://www.luogu.com.cn/problem/P1678题意解读:要计算不满意度之和的最小值,就要保证每个人的不满意度最小,即选择的学校录取分数-学生分数之差的绝对值最小。解题思路:如何在学校录取分数中找与学生分数最接近的呢?有三种可能:1、学生分数在录取分数中存在相等的2、学......
  • 洛谷题单指南-二分查找与二分答案-P1102 A-B 数对
    原题链接:https://www.luogu.com.cn/problem/P1102题意解读:寻找A-B=C的数对数量,C大于0,B一定比A小,枚举B,找A是否存在即可。解题思路:先将数据由小到大排序,接下来介绍两种方法:二分、双指针1、二分枚举第1~n-1个数,作为B,寻找A=B+C的数量,只需要通过二分查找第一A和最后一个A的位置l、......
  • 洛谷题单指南-二分查找与二分答案-P2249 【深基13.例1】查找
    原题链接:https://www.luogu.com.cn/problem/P2249题意解读:找有序数组中某个数第一次出现的位置,二分模版题,由于是二分板块的第一题,有必要对二分的各种模版进行介绍。解题思路:关于二分的一切:1、二分的本质二分的本质,是通过某种判定把目标范围划分成两个区间二分问题通常有两......
  • 洛谷题单指南-贪心-P1080 [NOIP2012 提高组] 国王游戏
    原题链接:https://www.luogu.com.cn/problem/P1080题意解读:通过不同的排队方式,让获得最多奖赏的大臣金额尽可能的少。此题如果没有思路,用全排列枚举可以“骗”分,更好的做法直觉上是某种贪心策略,另外基于数据规模考虑,要拿满分,需要上高精度。下面就由浅入深一步一步的解决。解题思......