zoukankan      html  css  js  c++  java
  • 人工智能

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

    输入
    第一行包含一个正整数 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

    在这里插入图片描述
    提示

    红色格子为样例中被控制到的格子,中间那个后能够斜着走到四个角落的格子(图中白色的格子),但因受到四个车的阻隔而不能控制到那四个格子!
    数据范围
    20%的数据,保证棋盘上只有车
    50%的数据,n<=50
    80%的数据,n<=200
    100%的数据,n<=1000,车的数量<=n*n,后的数量<=n

    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,i,j,k,m;
        scanf("%d",&n);
        int a[n][n];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j]==1)
                {
                    for(k=1;i-k>=0;k++)
                    {
                        if(a[i-k][j]==0||a[i-k][j]==3)
                        a[i-k][j]=3;
                        else break;
                    }
                    for(k=1;i+k<=n-1;k++)
                    {
                        if(a[i+k][j]==0||a[i+k][j]==3)
                        a[i+k][j]=3;
                        else break;
                    }
                    for(k=1;j-k>=0;k++)
                    {
                        if(a[i][j-k]==0||a[i][j-k]==3)
                        a[i][j-k]=3;
                        else break;
                    }
                    for(k=1;j+k<=n-1;k++)
                    {
                        if(a[i][j+k]==0||a[i][j+k]==3)
                        a[i][j+k]=3;
                        else break;
                    }
                }
                if(a[i][j]==2)
                {
                    for(k=1;i-k>=0;k++)
                    {
                        if(a[i-k][j]==0||a[i-k][j]==3)
                        a[i-k][j]=3;
                        else break;
                    }
                    for(k=1;i+k<=n-1;k++)
                    {
                        if(a[i+k][j]==0||a[i+k][j]==3)
                        a[i+k][j]=3;
                        else break;
                    }
                    for(k=1;j-k>=0;k++)
                    {
                        if(a[i][j-k]==0||a[i][j-k]==3)
                        a[i][j-k]=3;
                        else break;
                    }
                    for(k=1;j+k<=n-1;k++)
                    {
                        if(a[i][j+k]==0||a[i][j+k]==3)
                        a[i][j+k]=3;
                        else break;
                    }
                    for(m=1;i-m>=0&&j-m>=0;m++)
                    {
                        if(a[i-m][j-m]==0||a[i-m][j-m]==3)
                        a[i-m][j-m]=3;
                        else break;
                    }
                    for(m=1;i+m<=n-1&&j+m<=n-1;m++)
                    {
                        if(a[i+m][j+m]==0||a[i+m][j+m]==3)
                        a[i+m][j+m]=3;
                        else break;
                    }
                    for(m=1;i-m>=0&&j+m<=n-1;m++)
                    {
                        if(a[i-m][j+m]==0||a[i-m][j+m]==3)
                        a[i-m][j+m]=3;
                        else break;
                    }
                    for(m=1;i+m<=n-1&&j-m>=0;m++)
                    {
                        if(a[i+m][j-m]==0||a[i+m][j-m]==3)
                        a[i+m][j-m]=3;
                        else break;
                    }
                }
            }
        }
        int cnt=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j]==0)
                    cnt++;
            }
    
        }
        printf("%d
    ",cnt);
        return 0;
    }
    

    100多行可还行。

  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319577.html
Copyright © 2011-2022 走看看