幻想迷宫(或无限迷宫)——因为逻辑不清而做不出的典型

  我是复制了三块原矩阵。开始时复制了四个,一个方向一个,过了样例但四十分。后来调来调去,判断能否脱出的条件也换了又换,终于……

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<stack>
 9 #include<queue>
10 #include<cmath>
11 #include<map>
12 #include<set>
13 using namespace std;
14 const int N=3012,ax[]={1,-1,0,0},ay[]={0,0,1,-1};
15 struct node{int x,y;};
16 int n,m,sx,sy;
17 bool gr[N][N],res;
18 void dfs(int x,int y){
19     if(res)return;
20     if(x<0||y<0||x>2*n||y>2*m)return;
21     if(gr[x][y]&&!(x==sx&&y==sy))return;
22     if((x%n)==(sx%n)&&(y%m)==(sy%m)&&!(x==sx&&y==sy)){
23         res=true;
24         gr[x][y]=true;
25         return;
26     }
27     gr[x][y]=true;
28     if(gr[(x+1+2*n)%(2*n)][y]==0)dfs((x+1+2*n)%(2*n),y);
29     if(gr[(x-1+2*n)%(2*n)][y]==0)dfs((x-1+2*n)%(2*n),y);
30     if(gr[x][(y-1+2*m)%(2*m)]==0)dfs(x,(y-1+2*m)%(2*m));
31     if(gr[x][(y+1+2*m)%(2*m)]==0)dfs(x,(y+1+2*m)%(2*m));
32 }
33 int main(){
34     while(cin>>n>>m){
35         sx=1,sy=1;
36         res=false;
37         memset(gr,0,sizeof gr);
38         string s[N];
39         for(int i=0;i<n;i++)cin>>s[i];
40         for(int i=0;i<n;i++)
41             for(int j=0;j<m;j++){
42                 if(s[i][j]==‘#‘)gr[i][j]=true;
43                 else if(s[i][j]==‘S‘)sx=i,sy=j;
44             }
45         for(int i=0;i<n;i++)
46             for(int j=0;j<m;j++)
47                 gr[i+n][j]=gr[i][j+m]=gr[i+n][j+m]=gr[i][j];
48         gr[sx][sy]=true;
49         dfs(sx,sy);
50         cout<<(res?"Yes":"No")<<endl;
51     }
52     return 0;
53 }

Method_01

  洛谷 Yukikaze 988ms

时间: 2024-11-20 15:04:43

幻想迷宫(或无限迷宫)——因为逻辑不清而做不出的典型的相关文章

数据结构之迷宫问题求解(二)迷宫的最短路径

上篇文章我们讨论了,迷宫问题的普通求解问题,这篇文章我们继续深入,求迷宫的最短路径. 要想求迷宫的最短路径,一个很简单的方法就是再设置一个Min栈,用来放最短路径,每找到一个出口,就将path栈与Min栈进行比较,如果path栈更小,则赋值给Min. 而在上篇文章中,我们将走过的路径做了标记,每走一个坐标,就把那个坐标置为3,直至找到出口. 因此如果用这种标记方式,显然是会出现问题的. 所以我们需要换种标记方式! 最终....我决定,使出口的值为2,每走一步使当前位置标记变为是上一位置标记再加1

父类提供业务逻辑,子类做具体实现

public class Test { public static void main(String[]args) throws Exception{ Children c = new Children(); c.show(); } } class Parent  { public void show(){ stepOne(); stepTwo(); } void stepOne(){ System.out.println("parent.stepOne()"); } void ste

cdoj1088-王之迷宫 (三维迷宫最短路径)【BFS】

http://acm.uestc.edu.cn/#/problem/show/1088 王之迷宫 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 王被困在了一个3维的迷宫中,他很想逃离这个迷宫回去当学霸,你能帮助他么? 由于王很仁慈,他悄悄地告诉你,本题读入迷宫的每一行时,要用scanf("%s"...) ...... Input 多组测试

&lt;20&gt;【掌握】《走出迷宫》游戏代码实现+【理解】《走出迷宫》游戏优化

#include <stdio.h> #define COL 6 #define ROW 6 int main(int argc, const char * argv[]) { //****** 定义变量 ********** //1.定义变量,地图.存储用户输入的方向.小人的位置     char map[ROW][COL]={         {'#','#','#','#','#','#'},         {'#','O','#','#',' ',' '},         {'#'

java中异常处理机制 throw抛出自定义业务逻辑异常 throws继续抛出 catch捕获后会自动继续抛向调用方法

package com.swift; public class Exception_TestC { public static void main(String[] args) { /* * 第5题: 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个 * 方法a,请在这个方法中调用b,然后抛出异常.在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕 捉异常的信息.Java异常的处理机制 * * 如果try或cat

JS中使用逻辑 AND/OR 做条件判断及函数默认值

if变形语句! var foo = 10; foo == 10 && doSomething(); // 等价于 if (foo == 10) doSomething(); foo == 5 || doSomething(); // 等价于 if (foo != 5) doSomething(); 逻辑 AND 还可以被使用来为函数参数设置默认值 function doSomething(arg1){ Arg1 = arg1 || 10; // 如果arg1没有被设置的话,Arg1将被默认

股票术语大全

成交数量——      指当天成交的股票数量. 日最高价——      指当天该股票成交价格中的最高价格. 日最低价——      指当天该股票成交价格中的最低价格. 跳空——      指受强烈利多或利空消息刺激,股价开始大幅度跳动.跳空通常在股价大变动的开始或结束前出现. 成交笔数——      指该股成交的次数. 日成交额——      指当天已成交股票的金额总数. 多头——      指股票成交中的买方. 空头——      指股票成交中的卖方. 涨跌——      当日股票价格与前一日

bzoj 2707 [SDOI2012]走迷宫(SCC+高斯消元)

Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. Input 第1行4个整数,N,M,S,T 第[2, M+1]行每行两个整数o1, o2,表示有一条从o

求迷宫通路问题

本次我们探讨一下迷宫小游戏. 让我们来探讨一下怎样可以得到一条通路,采用栈来实现. 当是通路的时候,节点压栈.当走到尽头不通时,出栈,寻找交叉口,寻找通路. 像这样在第一行存放迷宫的规格(在这里为传参少,定义正方形迷宫),设计迷宫,将迷宫以.txt格式存放在目录下(可以是任何地方,下文以默认路径为例). 假设入口为(2,0),出口为迷宫最后一行任意位置. MAZE.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream