美文网首页
Gym - 100947B 八皇后变形题

Gym - 100947B 八皇后变形题

作者: Anxdada | 来源:发表于2017-02-15 10:39 被阅读0次

题意:就是八皇后问题的变形,给你八个皇后的位置,问是否满足八皇后的摆放.
注: 任意皇后可以攻击同一行,同一列,同一对角线的其他皇后.

思路: 直接判断所输入的位置是否冲突就可以了,即判断是否后面输入与前面同行,同列或同对角线. 所以用4个数组分别标记下每一个位置看是否冲突就行了.

代码如下:

#include<cstdio>
void check()
{
    int flag=1;
    int a[10]={0},b[10]={0},c[25]={0},d[25]={0};
    char ch[5];
    for(int i=0;i<8;i++){
        scanf("%s",ch);
        int x=ch[0]-'A'+1;
        int y=ch[1]-'0';
        if(a[x])  flag=0;//这两个判断是否有同行或同列
        if(b[y])  flag=0;
        if(c[x+y])  flag=0;//判断是否有同负对角线
        if(d[x-y+10])  flag=0;//判断是否有同正对角线,为了防止出现负数,所以需要加一个数.
        a[x]=1,b[y]=1;
        c[x+y]=1,d[x-y+10];
    }//flag=1,即所有的点都不同行同列或同对角线,即符合八皇后摆放.
    if(flag)    printf("Valid\n");
    else printf("Invalid\n");
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        check();
    }
}

再附上摆放8皇后的代码: (可以推广到n皇后)

#include<cstdio>
#include<cmath>
#include<algorithm>
const int N=8;
int a[10];  //a[i]存的是放在第i行的皇后的列的坐标.
//我们的思想是每一行放一个皇后. 然后递归下去放皇后.
bool check(int *a,int n)  //这个是关键.
{
    for(int i=2;i<=n;i++){
        for(int j=1;j<=i-1;j++){
            if(a[i]==a[j] || (abs(a[i]-a[j]) == abs(i-j)))
                return false;
        }
    }
    return true;
}
int flag=0;
void Queen8(int k)
{
    if(flag) return ;
    if(k>N){
        for(int i=1;i<=N;i++){
            printf("(%d,%d)\n",i,a[i]);
        }
        flag=1;  //只打印一种情况.
        return ;
    }
    for(int i=1;i<=N;i++){
        a[k]=i;
        if(check(a,k))   //如果不冲突,递归摆放下一个皇后.
            Queen8(k+1);
    }
    return ;
}

int main()
{
    Queen8(1);
}

相关文章

  • Gym - 100947B 八皇后变形题

    题意:就是八皇后问题的变形,给你八个皇后的位置,问是否满足八皇后的摆放.注: 任意皇后可以攻击同一行,同一列,同一...

  • 优质题解:2n皇后问题

    原题链接:[蓝桥杯][基础练习VIP]2n皇后问题 解题思路:首先理解八皇后,然后就是一个使用两个八皇后叠加的问题...

  • 皇后问题

    经常做算法赛题的朋友们都知道,八皇后问题是一道经典的搜索回溯题。简单来说,皇后问题就是在一个国际象棋棋盘上摆放若干...

  • 题目整理2

    这个月内的一些有趣的题 Letter Array http://codeforces.com/gym/100482...

  • Gym gym

    自从加入新的健身房之后,坚持一周三次上不同的力量训练和举铁高强度课,还尝试了拳击课和打击棍子的pound;四个星期...

  • Fastlane - gym

    认识Xcodebuild命令 gym概述: 使用方法: fastlane gym fastlane gym --w...

  • Partition Equal Subset Sum (Leet

    这道题是一道变形题,可以变型到背包。 建立背包,表示是否可以拿到总和的一半。 注意,这道题不能变形到Presum,...

  • 11.数据结构—八皇后问题(回溯法)

    11.1 八皇后问题 八皇后问题是以国际象棋为背景的问题:有八个皇后(可以当成八个棋子),如何在 88 的棋盘中放...

  • 媳妇多就用分支修剪,解决婆娘纷争,C语言经典算法之八皇后问题

    八皇后问题 西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在...

  • 八皇后&N皇后

    八皇后 二维数组TLE 优化 设i为行,j为列,从图可验证:*如果在同一列,列号相同*若果同在/斜线上,行列值之和...

网友评论

      本文标题:Gym - 100947B 八皇后变形题

      本文链接:https://www.haomeiwen.com/subject/eibfwttx.html