ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

问题解决:【OJ1582】敌人入侵

2021-12-25 21:32:12  阅读:173  来源: 互联网

标签:sy sx 格子 int OJ1582 front 攻占 入侵 敌人


题目描述:

有一个城市是宽度为x,高度为y的网格图,(1,1)是左下角的格子。敌人刚开始占领了(sx,sy)格子,每天会攻占8个方向(上下左右,左上左下,右上右下)有人居住的所有格子。1天之后,又可以从这些被攻占的格子攻占其他格子。敌人想知道,多少天可以把该城市有人的地方都被攻占(数据保证都会被攻占)。
城市地图中,"."表示有人居住,而"*"表示没有人居住。

样例如下,这个宽度x=4,高度y=3的地图。
....
..*.
.**.

坐标表示如下(跟平面直角坐标系一样):

(1,3)(2,3)(3,3)(4,3)

(1,2)(2,2)(3,2)(4,2)

(1,1)(2,1)(3,1)(4,1)
如果敌人一开始在左下角(1,1),那么城市将会以如下态势发展:

        

1519726678314225445.png

天数  0            1           2           3           4
敌人会在4天后占领整个城市。

输入: 

第一行,四个整数x,y,sx,sy。分别表示城市的宽度,高度,敌人初始位置。
第2到第n+1行,每行有m个字符("."表示有人居住,"*"表示无人居住)。

输出:

一个数,表示多少天城市会被攻占。

样例输入:

4 3 1 1
....
..*.
.**.

样例输出:

4

数据范围:

1<=x,y<=100

以下是代码:

#include<bits/stdc++.h>
using namespace std;
char m[105][105];
int bg[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
int n,k,sx,sy,s;
struct data{
    int x,y,s;
    data(int x1,int y1,int s1):x(x1),y(y1),s(s1){}
};
queue<data> q;
void f(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++)cout<<m[i][j];
        cout<<endl;
    }
    cout<<endl;
}
int main(){
    cin>>k>>n>>sy>>sx;
    sx=n-sx+1;
    for(int i=1;i<=n;i++){
        getchar();
        for(int j=1;j<=k;j++)cin>>m[i][j];
    }
    q.push(data(sx,sy,0));
    m[sx][sy]='A';
    while(!q.empty()){
        int x=q.front().x;
        int y=q.front().y;
        s=q.front().s;
        q.pop();
        for(int i=0;i<8;i++){
            int nx=x+bg[i][0];
            int ny=y+bg[i][1];
            if(nx>0&&nx<=n&&ny>0&&ny<=k&&m[nx][ny]=='.')
                m[nx][ny]='A',q.push(data(nx,ny,s+1));
        }
    }
    cout<<s<<endl;
    return 0;
}

如有疑问,可以在下方评论中提出哦~

小编会尽量解决你的问题。

标签:sy,sx,格子,int,OJ1582,front,攻占,入侵,敌人
来源: https://blog.csdn.net/zyl_coder/article/details/122148849

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有