https://ac.nowcoder.com/acm/contest/330/C

C++版本一

std

题解:

搜索,模拟

BFS 求最短路。
注意点是状态要三维。d[x][y][0/1]表示在(x, y)处,属性为水/火的最短路。
按题意模拟,分类讨论转移即可。

#include <bits/stdc++.h>
using namespace std;typedef pair<pair<int, int>, int> Node;
const int maxn = 105;
char maze[maxn][maxn];
int vis[maxn][maxn][2];
int tx[] = {-1, 0, 1, 0};
int ty[] = {0, -1, 0, 1};int bfs(const pair<int, int>& S,const pair<int, int>& T,int n, int m)
{memset(vis, -1, sizeof(vis));queue<Node> q;q.push({S, 0});vis[S.first][S.second][0] = 0;while (!q.empty()){Node tmp = q.front();q.pop();int x = tmp.first.first, y = tmp.first.second;bool p = tmp.second;for (int i = 0; i < 4; i++){int nx = x + tx[i], ny = y + ty[i];if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;if (~vis[nx][ny][p]) continue;if (maze[nx][ny] == '#') continue;if (p && maze[nx][ny] == '~') continue;if (!p && maze[nx][ny] == 'w') continue;vis[nx][ny][p] = vis[x][y][p] + 1;pair<int, int> nxt = {nx, ny};if (nxt == T) return vis[nx][ny][p];q.push({nxt, p});}if (maze[x][y] == '@' && vis[x][y][p ^ 1] == -1){vis[x][y][p ^ 1] = vis[x][y][p] + 1;q.push({tmp.first, p ^ 1});}}return -1;
}int main()
{int n, m;pair<int, int> S, T;scanf("%d%d", &n, &m);for (int i = 0; i < n; i++)scanf("%s", maze[i]);for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)if (maze[i][j] == 'S')S = {i, j};else if (maze[i][j] == 'T')T = {i, j};int ans = bfs(S, T, n, m);printf("%d\n", ans);return 0;
}扫一扫,把题目装进口袋

C++版本二

BFS

/*
*@Author:   STZG
*@Language: C++
*/
#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=1000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
int t,n,m,k,sx,sy,ex,ey;
int ans,cnt,flag,temp;
int dir[][2]={0,1,1,0,0,-1,-1,0};
char str[N][N];
bool vis[N][N][2];
struct node{int x,y,f,step;
}s,tmp,f;
int main()
{
#ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout);
#endifscanf("%d%d",&n,&m);//scanf("%d",&t);//while(t--){}for(int i=1;i<=n;i++){scanf("%s",str[i]+1);for(int j=1;j<=m;j++){if(str[i][j]=='S')sx=i,sy=j;if(str[i][j]=='T')ex=i,ey=j;}}queue<node>q;s.x=sx;s.y=sy;s.f=0;s.step=0;vis[sx][sx][0]=1;q.push(s);while(!q.empty()){f=q.front();q.pop();//cout<<f.x<<" "<<f.y<<endl;if(f.x==ex&&f.y==ey){flag=1;break;}f.step++;tmp=f;if(str[f.x][f.y]=='@'){tmp.f=!tmp.f;if(vis[tmp.x][tmp.y][tmp.f]==0){vis[tmp.x][tmp.y][tmp.f]=1;q.push(tmp);}}tmp=f;for(int i=0;i<4;i++){tmp.x=f.x+dir[i][0];tmp.y=f.y+dir[i][1];if(tmp.x<1||tmp.y<1||tmp.x>n||tmp.y>m)continue;if(str[tmp.x][tmp.y]=='#')continue;if(vis[tmp.x][tmp.y][tmp.f])continue;if(str[tmp.x][tmp.y]=='~'&&tmp.f==1)continue;if(str[tmp.x][tmp.y]=='w'&&tmp.f==0)continue;vis[tmp.x][tmp.y][tmp.f]=1;q.push(tmp);}}if(flag)cout<<f.step<<endl;elsecout<<-1<<endl;//cout << "Hello world!" << endl;return 0;
}

Applese 走迷宫相关推荐

  1. 【牛客 - 330C】Applese 走迷宫(bfs)

    题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...

  2. Applese 走迷宫(优先队列+bfs)

    链接:https://ac.nowcoder.com/acm/problem/22344 来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m 的迷宫中 ...

  3. 蓝桥杯国赛-大胖子走迷宫

    广度优先搜索,见注释 五个状态:上下左右停 题目提交 import java.util.ArrayDeque; import java.util.Queue; import java.util.Sca ...

  4. BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]

    2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...

  5. 无脑单细胞竟会走迷宫、规划交通路线,这种难以归类的生物重定义了智能

    本文转载自公众号SME 在电子游戏的一般套路设定下,蠢萌的史莱姆总是那个最低级的怪物. 它们几乎没有智商可言,攻击手段单一且总是以动技能著称,正所谓"烂泥扶不上壁". 而纵观各个类 ...

  6. 迷宫python_Python走迷宫,递归 - nixBlog

    递归走迷宫,练手. 23下午就写好的,可是测试几种不同的迷宫后,发现有个Bug,我以为算法有问题,今早才发现,原来是isDest函数里r和c都写成r了,拷贝out函数的语句再改写造成的悲剧. #!/u ...

  7. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  8. java课程设计总结迷宫_Java课程设计走迷宫详解.doc

    Java语言与面向对象技术 课程设计报告 ( 2014 -- 2015年度第 1 学期) 走迷宫 目 录 目 录2 1 概 述1 1.1 课程设计目的1 1.2 课程设计内容1 2 系统需求分析2 2 ...

  9. K - 老鼠走迷宫(DFS)

    Description 现在一只老鼠被困在了迷宫里!你需要判断老鼠能否走出迷宫. 老鼠只能向上下左右四个方向移动.我们认为只要老鼠走到了迷宫的边界即算走出迷宫. Input 第一行输入两个整数 n, ...

最新文章

  1. Flex开发实战(一)--Flex的详细介绍
  2. Linux 编程--三种常用的定时器
  3. 机器学习(五)——缓解过拟合
  4. linux cpu平均负载,关于linux系统CPU篇---平均负载
  5. CodeForces - 1313B Different Rules(数学+思维)
  6. CF1063F-String Journey【SAM,线段树】
  7. 统计指定目录下的视频时长
  8. 阿里影业“云智开放平台”炼成记!
  9. C++基础::自制异常定位器
  10. python基础篇--从零开始(中)PyCharm、Vscode安装。
  11. javascript对象概念大全
  12. Java防御目录穿越漏洞方法_WinRAR目录穿越漏洞复现及防御
  13. Linux系统彻底卸载MySQL数据库
  14. unity 解决图片无法拖进场景的问题
  15. winRAR去广告版
  16. linux启动项修复工具,Boot Repair Tool: 可以修复与启动相关的大部分问题
  17. css层叠优先级,CSS样式的优先级(层叠)
  18. docsify(一):新增PDF目录、封面功能
  19. 正则判断手机号地区_判断手机号正则表达式
  20. 基于色彩直方图匹配的颜色传递算法

热门文章

  1. 分别是什么意思_美国FBA头程:空派/海派分别是什么意思?
  2. 计算机简单游戏有什么用,简单又好玩的互动游戏 简单又好玩的互动游戏有哪些...
  3. MysqlDataTruncation Mysql 数据插入错误
  4. mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生
  5. php编写开机启动脚本,设置 msyql php-fpm 开机自动启动脚本
  6. 三、ResNet50预置算法提高美食分类识别精确度
  7. 五十八、Java8的新特性Lambda表达式
  8. 三十一、R语言基本语法(上篇)
  9. kaggle研究生招生(上)
  10. 关于数据库插入中文乱码问题