n * n象棋桌中有多少个正方形,m个主教不能走?

问题描述 投票:2回答:1

我目前正在研究一个程序,该程序计算n * n大小的国际象棋网格上m个主教的移动。我只有一个程序,只能找到一位主教无法进入的正方形。有人可以帮忙吗?我是该网站的新手,并且英语语法知识不好,所以我在帖子中犯了一些错误。

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int ways(int r,int c,int n)
{
    int TL,TR,BL,BR;
    TL = min(r,c) - 1;
    TR = min(r,(n+1)-c) - 1;
    BL = n - max(r,(n+1)-c);
    BR = n - max(r,c);
    return (TL+TR+BL+BR);
}

int main()
{
    int r,c,n;
    cin >> r >> c >> n;
    cout << n*n - ways(r,c,n);
    return 0;
}

如果主教行和coluum均为4,并且网格大小为8 * 8,则该主教拥有51个无法访问的正方形。但是我不知道该怎么做,以便程序可以计算出主教无法访问的平方数。

c++ chess
1个回答
3
投票

有几种方法可以完成此任务,但我会给您一个简单的算法。

那些主教的平方数无法访问=

[Total平方数-这些主教的平方数可以访问

因为很容易计算平方总数(n * n),所以问题归结为计算那些主教从给定位置可以访问的平方总数。

在您的代码中,您没有读取主教的数量及其初始坐标。那应该是第一步。

由于您使用的是C ++,因此可以使用std::set中的std::set简化您的任务。集合用于存储唯一元素,因此您可以使用它来存储主教可以访问的位置并避免重复。可以使用一对将位置存储为坐标(i,j)

通过每个主教进行迭代,并计算他们可以访问的正方形并将其添加到集合中。最后,您具有主教可以覆盖的正方形总数作为该集合的大小。

然后使用以上公式获得所需的结果。

以下是该方法的实现:

std::pair
© www.soinside.com 2019 - 2024. All rights reserved.