• 题意:有一个图,要求从\(S\)走到\(E\),\(.\)表示可以走的路径,\(*\)周围的八个方向均不能走,要求判断是否能走到\(E\),若能,输出最小路径长度,否则输出\(Impossible\).

  • 题解:我们先把\(*\)周围的点标记一下,然后判断\(E\)是否被标记过了,如果没有,则找到\(S\)的位置进行BFS,结构体\(s\)记录坐标和路径,每次判断一下,然后再把点入队搞搞就好了.

    其实就是BFS的板子题.

  • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #include <unordered_set>
    #include <unordered_map>
    #define ll long long
    #define fi first
    #define se second
    #define pb push_back
    #define me memset
    const int N = 1e6 + 10;
    const int mod = 1e9 + 7;
    const int INF = 0x3f3f3f3f;
    using namespace std;
    typedef pair<int,int> PII;
    typedef pair<ll,ll> PLL; int n,m;
    int ans;
    char a[100][100];
    bool vis[100][100];
    int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; struct s{
    int x,y,cnt;
    }p; bool bfs(int x,int y){
    queue<s> q;
    vis[x][y]=true;
    p.x=x,p.y=y,p.cnt=0;
    q.push(p);
    while(!q.empty()){
    s tmp=q.front();
    q.pop();
    if(a[tmp.x][tmp.y]=='E'){
    ans=tmp.cnt;
    return true;
    }
    for(int i=0;i<4;++i){
    int tx=tmp.x+dx[i];
    int ty=tmp.y+dy[i];
    if((a[tx][ty]=='.'||a[tx][ty]=='E') && !vis[tx][ty]){
    vis[tx][ty]=true;
    p.x=tx,p.y=ty,p.cnt=tmp.cnt+1;
    q.push(p);
    }
    }
    }
    return false;
    } int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
    cin>>a[i][j];
    }
    }
    for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
    if(a[i][j]=='*'){
    if(a[i+1][j]!='*') a[i+1][j]=-1;
    if(a[i+1][j+1]!='*') a[i+1][j+1]=-1;
    if(a[i][j+1]!='*') a[i][j+1]=-1;
    if(a[i-1][j+1]!='*') a[i-1][j+1]=-1;
    if(a[i-1][j]!='*') a[i-1][j]=-1;
    if(a[i-1][j-1]!='*') a[i-1][j-1]=-1;
    if(a[i][j-1]!='*') a[i][-1]=-1;
    if(a[i+1][j-1]!='*') a[i+1][j-1]=-1;
    }
    }
    }
    bool ok=0;
    for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
    if(a[i][j]=='E'){
    ok=1;
    }
    }
    }
    if(!ok){
    cout<<"Impossible"<<endl;
    return 0;
    }
    for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
    if(a[i][j]=='S'){
    ok=bfs(i,j);
    }
    }
    }
    if(ok) cout<<ans<<endl;
    else cout<<"Impossible"<<endl; return 0;
    }

哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) C.Coronavirus (BFS)的更多相关文章

  1. 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) Solution

    A: Solved. 分别处理出每个%7后余数的数字个数,再组合一下 #include <bits/stdc++.h> using namespace std; #define ll lo ...

  2. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

    链接:https://ac.nowcoder.com/acm/contest/635/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  3. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

  4. HUST软件与微电子学院第八届程序设计竞赛-小乐乐下象棋

    这题其实很简单,我们可以用一个bfs搜索出所有的,小于k步的,到不同点不同步数的方案数. 我们首先初始化,走到(0,0)点的时候,我们把步数设置为0,但是方法数设置为1,这是因为我们走零步,到一个点, ...

  5. ACM-南京理工大学第八届程序设计竞赛-网络赛(2016.04.17)

    A.偷吃糖果Time Limit: 1000Ms Memory Limit: 65536KB Description小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成. ...

  6. 2017年浙江理工大学程序设计竞赛校赛 题解&源码(A.水, D. 简单贪心 ,E.数论,I 暴力)

    Problem A: 回文 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1719  Solved: 528 Description 小王想知道一个字 ...

  7. 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)

    题目链接:https://ac.nowcoder.com/acm/contest/874/D 题目大意:给你两个数列a和b然后对a可以进行排列,对b可以任意排列,问你sigma(a(i)*b(i))的 ...

  8. 2018年浙江理工大学程序设计竞赛校赛 Problem I: 沙僧

    沙僧 思路: dfs序+差分数组 分层考虑,通过dfs序来查找修改的区间段,然后用差分数组修改 代码: #include<bits/stdc++.h> using namespace st ...

  9. 华南理工大学“三七互娱杯”程序设计竞赛 HRY and codefire(概率期望DP)

    https://ac.nowcoder.com/acm/contest/874/A 题目:有两个账号 , 一开始都为0级 , 求任意一个账号升级到N的期望 要求:如果当前账号嬴了 , 就继续沿用当前的 ...

随机推荐

  1. python学习笔记 | wordcloud安装指南

    问题: 直接在命令行输入: pip install wordcloud 不出意外,直接报错,显示缺失vc*****.bat,意思是缺失vc版本,这个安装方式基本可以扔掉. 解决: http://t.c ...

  2. Head First 设计模式 —— 14. 复合 (Compound) 模式

    复合模式 在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题. P500 思考题 public interface Quackable { public void quack(); } p ...

  3. H5手机网页元素识别

  4. 虚拟机linux共享文件夹

    linux共享文件夹问题 1. 初配置 2. 挂载 018.7.8 为了实现win7与VMware中linux文件夹共享很花费了一些时间,但终成正果 1. 初配置 虚拟机设置->选项->共 ...

  5. 【Jboss】A RESOURCE POOL IS PERMANENTLY BROKEN!

    jboss后台报错,其中有这个错误 [error] A RESOURCE POOL IS PERMANENTLY BROKEN! 查阅多方资料后发现.数据库连接配置文件中,有地方存在空格,导致服务连接 ...

  6. Entity与Entity之间的相互转化

    一.两个实体类的属性名称对应之间的转化 1.两个实体类 public class Entity1 { private Integer id; private String name; private ...

  7. scrapy异步的爬虫框架简单的使用

    scrapy异步的爬虫框架 异步的爬虫框架 高性能的数据解析,持久化存储,全栈数据的爬取,中间件,分布式 框架:就是一个集成好了各种功能且具有很强通用性的一个项目模板. 环境安装: Linux: pi ...

  8. uni-app开发经验分享二十一: 图片滑动解锁插件制作解析

    在开发用户模块的时候,相信大家都碰到过一个功能,图片滑动解锁后发送验证码,这里分享我用uni-app制作的一个小控件 效果如下: 需要如下图片资源 template <template> ...

  9. 001.IT运维面试问题-Linux基础

    Linux基础 简述Linux主流的发行版? Redhat.CentOS.Fedora.SuSE.Debian.Ubuntu.FreeBSD等. 简述Linux启动过程? ⑴开机BIOS自检,加载硬盘 ...

  10. Hmailserver搭建邮箱服务器

    由于阿里云,谷歌云,腾讯云等服务器都不开放25端口和pop3端口,想要使用邮箱服务得购买他们的企业邮箱,但是对于个人而言比较贵. 所以我们需要利用家庭宽带申请公网IP. 首先打电话给运营商客服,申请动 ...