C-迷宫(牛客月赛99

2024-08-24 11:28
文章标签 牛客 99 迷宫

本文主要是介绍C-迷宫(牛客月赛99,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:在n×m的迷宫里,有空地和障碍,有一个超能力:当前位置朝任意方向上所有的障碍物都会清除,超能力最多使用一次,如果可以到终点输出yes

分析:先从终点开始走,将沿路的障碍的横坐标和纵坐标都做上标记,再从起点开始走,如果下一个网格为障碍,判断该方向的坐标是否被做上标记,如果被标记,则可以在该方向上释放超能力。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+10;
int n,m,sx,sy,zx,zy;
char a[N][N];
ll ans=0;
int temp[N][N],xx[N],yy[N];
ll dx[4]={0,0,1,-1};
ll dy[4]={-1,1,0,0};
void d(int x,int y){if(x==sx&&y==sy){ans++;return;}for(int i=0;i<4;i++){if(a[x+dx[i]][y+dy[i]]=='#'){xx[x+dx[i]]=1;yy[y+dy[i]]=1;}if(temp[x+dx[i]][y+dy[i]]==0&&(a[x+dx[i]][y+dy[i]]=='E'||a[x+dx[i]][y+dy[i]]=='.'||a[x+dx[i]][y+dy[i]]=='S')){temp[x][y]=1;d(x+dx[i],y+dy[i]);}}
}
void dd(int x,int y){if(x==zx&&y==zy){ans++;return;}for(int i=0;i<4;i++){if(temp[x+dx[i]][y+dy[i]]==0&&(a[x+dx[i]][y+dy[i]]=='E'||a[x+dx[i]][y+dy[i]]=='.'||a[x+dx[i]][y+dy[i]]=='S')){temp[x][y]=1;dd(x+dx[i],y+dy[i]);}else if(temp[x+dx[i]][y+dy[i]]==0&&a[x+dx[i]][y+dy[i]]=='#'){if(yy[y]==1&&dy[i]==0){ans++;return;}else if(xx[x]==1&&dx[i]==0){ans++;return;}}}
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];if(a[i][j]=='S'){sx=i,sy=j;}else if(a[i][j]=='E'){zx=i,zy=j;}}}d(zx,zy);if(ans>0){cout<<"YES"<<endl;return 0;}dd(sx,sy);if(ans>0)cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

这篇关于C-迷宫(牛客月赛99的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102349

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

nyoj306(走迷宫)

走迷宫 时间限制: 1000 ms  |  内存限制: 65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲。这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫。整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。 这个迷宫可以向上走,向

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于抽象工厂的迷宫

 示例:基于抽象工厂的迷宫   实现:     如果TMaze.Create是传递一个对象当作参数来建立rooms、walls及doors;如此你可以以不同的参数来改变rooms、walls及doors的类。  请注意MazeFactory也就是工厂方法(Factory Method)的一个集合;这是最通常实现抽象工厂模式的方式。同时请注意MazeFactory不是一个抽象类

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu