题目描述: 人胖了就容易打瞌睡,打瞌睡又会导致长胖,这对小X的减重计划很不利,于是小X决定做点动脑子的事来抵御瞌睡虫的进袭,小X决定响应国务院的号召投身到人工智能的研究开发大潮中去,具体研究什么好呢?小X再三思考后决定开发国际象棋的人工智能软件,虽然国际象棋的软件已经能够战胜人类世界冠军了,但那是基于搜索的AI(AI是人工智能的简称),小X想写一个基于机器学习的国际象棋AI,目标是战胜旧M的深蓝,小X的国际象棋水平也不差,曾获得过市青少年比赛的冠军,机器学习顾名思义就是让机器像人一样学习,小X首先训练机器学习棋子对棋盘的控制,具体做法是小X先在棋盘上放置若干个车和后,然后让机器判断有多少个格子没有被车和后控制到。

车和后的吃子规则如下:车:横、竖均可以走,步数不受限制,但不能斜着走。后:横、竖、斜都可以走,步数不受限制。无论是车还是后都不能越过棋子去吃子,用作训练的国际象棋棋盘可以放大缩小,并不限于8x8的棋盘,车和后所在的位置当然是被控制的,它们能走到的位置也都被控制。

输入:第一行包含一个正整数n,表示棋盘的大小。 接下来n行,每行n个整数,其中0表示棋盘上这个格子为空的,1表示为车,2表示为后。

输出:一行一个整数,表示没有被控制到的格子数量。

样例组:

样例输入: 5 0 0 0 0 0 0 1 0 1 0 0 0 2 0 0 0 1 0 1 0 0 0 0 0 0 样例输出: 4

用C++内容:#include #include

using namespace std;

int main() { int n; cin >> n;

vector<vector<int>> chessboard(n, vector<int>(n));
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        cin >> chessboard[i][j];
    }
}

int count = 0;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (chessboard[i][j] == 0) {
            bool controlled = false;
            // Check vertically and horizontally
            for (int k = 0; k < n; k++) {
                if (chessboard[i][k] == 1 || chessboard[k][j] == 1) {
                    controlled = true;
                    break;
                }
            }
            // Check diagonally
            int x = i, y = j;
            while (x >= 0 && y >= 0) {
                if (chessboard[x][y] == 2) {
                    controlled = true;
                    break;
                }
                x--;
                y--;
            }
            x = i, y = j;
            while (x >= 0 && y < n) {
                if (chessboard[x][y] == 2) {
                    controlled = true;
                    break;
                }
                x--;
                y++;
            }
            x = i, y = j;
            while (x < n && y >= 0) {
                if (chessboard[x][y] == 2) {
                    controlled = true;
                    break;
                }
                x++;
                y--;
            }
            x = i, y = j;
            while (x < n && y < n) {
                if (chessboard[x][y] == 2) {
                    controlled = true;
                    break;
                }
                x++;
                y++;
            }
            if (!controlled) {
                count++;
            }
        }
    }
}

cout << count << endl;

return 0;

原文地址: http://www.cveoy.top/t/topic/p55q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录