Applese 走迷宫
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 走迷宫相关推荐
- 【牛客 - 330C】Applese 走迷宫(bfs)
题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...
- Applese 走迷宫(优先队列+bfs)
链接:https://ac.nowcoder.com/acm/problem/22344 来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m 的迷宫中 ...
- 蓝桥杯国赛-大胖子走迷宫
广度优先搜索,见注释 五个状态:上下左右停 题目提交 import java.util.ArrayDeque; import java.util.Queue; import java.util.Sca ...
- BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...
- 无脑单细胞竟会走迷宫、规划交通路线,这种难以归类的生物重定义了智能
本文转载自公众号SME 在电子游戏的一般套路设定下,蠢萌的史莱姆总是那个最低级的怪物. 它们几乎没有智商可言,攻击手段单一且总是以动技能著称,正所谓"烂泥扶不上壁". 而纵观各个类 ...
- 迷宫python_Python走迷宫,递归 - nixBlog
递归走迷宫,练手. 23下午就写好的,可是测试几种不同的迷宫后,发现有个Bug,我以为算法有问题,今早才发现,原来是isDest函数里r和c都写成r了,拷贝out函数的语句再改写造成的悲剧. #!/u ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- java课程设计总结迷宫_Java课程设计走迷宫详解.doc
Java语言与面向对象技术 课程设计报告 ( 2014 -- 2015年度第 1 学期) 走迷宫 目 录 目 录2 1 概 述1 1.1 课程设计目的1 1.2 课程设计内容1 2 系统需求分析2 2 ...
- K - 老鼠走迷宫(DFS)
Description 现在一只老鼠被困在了迷宫里!你需要判断老鼠能否走出迷宫. 老鼠只能向上下左右四个方向移动.我们认为只要老鼠走到了迷宫的边界即算走出迷宫. Input 第一行输入两个整数 n, ...
最新文章
- Flex开发实战(一)--Flex的详细介绍
- Linux 编程--三种常用的定时器
- 机器学习(五)——缓解过拟合
- linux cpu平均负载,关于linux系统CPU篇---平均负载
- CodeForces - 1313B Different Rules(数学+思维)
- CF1063F-String Journey【SAM,线段树】
- 统计指定目录下的视频时长
- 阿里影业“云智开放平台”炼成记!
- C++基础::自制异常定位器
- python基础篇--从零开始(中)PyCharm、Vscode安装。
- javascript对象概念大全
- Java防御目录穿越漏洞方法_WinRAR目录穿越漏洞复现及防御
- Linux系统彻底卸载MySQL数据库
- unity 解决图片无法拖进场景的问题
- winRAR去广告版
- linux启动项修复工具,Boot Repair Tool: 可以修复与启动相关的大部分问题
- css层叠优先级,CSS样式的优先级(层叠)
- docsify(一):新增PDF目录、封面功能
- 正则判断手机号地区_判断手机号正则表达式
- 基于色彩直方图匹配的颜色传递算法
热门文章
- 分别是什么意思_美国FBA头程:空派/海派分别是什么意思?
- 计算机简单游戏有什么用,简单又好玩的互动游戏 简单又好玩的互动游戏有哪些...
- MysqlDataTruncation Mysql 数据插入错误
- mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生
- php编写开机启动脚本,设置 msyql php-fpm 开机自动启动脚本
- 三、ResNet50预置算法提高美食分类识别精确度
- 五十八、Java8的新特性Lambda表达式
- 三十一、R语言基本语法(上篇)
- kaggle研究生招生(上)
- 关于数据库插入中文乱码问题