705 - Slash Maze

2024-08-24 04:48
文章标签 705 slash maze

本文主要是介绍705 - Slash Maze,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:705 - Slash Maze


题目大意:给一个斜线迷宫,求这个迷宫是否有环,最长环的长度。


解题思路:将斜线放大三倍,用数组来储存。这样的话就不需要八个方向遍历,只需要上下左右四个方向就可以了。然后如果有遍历到数组边界的就可以认定不是环了。


#include<stdio.h>
#include<string.h>const int N = 250;
char str[N];
int visit[N][N], map[N][N];
int w, h, t = 0, flag, cnt;int dir[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};void change(int n) {for(int i = 0; i < w; i++)if(str[i] == '\\') {map[3 * n][3 * i] = 1;map[3 * n + 1][3 * i + 1] = 1;map[3 * n + 2][3 * i + 2] = 1;}else if(str[i] == '/') {map[3 * n][3 * i + 2] = 1;map[3 * n + 1][3 * i + 1] = 1;map[3 * n + 2][ 3 * i] = 1;}
}void dfs(int x, int y) {cnt++;visit[x][y] = 1;int i, x1, y1;for( i = 0; i < 4; i++) {x1 = x + dir[i][0];y1 = y + dir[i][1];if(x1 < 0 || x1 >= 3 * h || y1 < 0 || y1 >= 3 * w)continue;if(map[x1][y1] || visit[x1][y1])continue;if(x1 == 0 || x1 == 3 * h - 1 || y1 == 0 || y1 == 3 * w -1)flag = 1;dfs(x1, y1);}}int main() {while(scanf("%d%d%*c", &w, &h) , w || h) {t++;memset(map, 0, sizeof(map));memset(visit, 0, sizeof(visit));int i, j;for(i = 0; i < h; i++) {scanf("%s", str);change(i);}int circle_num = 0, max = 0;for(i = 1; i < 3*h - 1; i++)for(j = 1; j < 3*w - 1; j++)if(!map[i][j]  && !visit[i][j]) {flag = 0;cnt = 0;dfs(i, j);if(!flag) {circle_num++;if(cnt > max)max = cnt;}}printf("Maze #%d:\n", t);if(circle_num) printf("%d Cycles; the longest has length %d.\n\n", circle_num, max / 3);elseprintf("There are no cycles.\n\n");}return 0;
}


这篇关于705 - Slash Maze的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HDU 4035 Maze (树状dp + 概率)

OJ题目 : click here ~~~ 题目分析 :这篇文章已经说的很好很好了 , 直接借用 ,猛戳~~ int n;double k[10002] , e[10002];double A[10002] , B[10002] , C[10002];vector<int> List[10002];bool dfs(int u , int father){if(List[u].s

【HDU】 4067 Random Maze 费用流

Random Maze Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1114    Accepted Submission(s): 387 Problem Description In the game “A C

CodeForces 404E Maze 1D

题意: 一个机器人在数轴上的0点  给一串指令机器人按照指令走  为了使机器人最后一步走到一个从来没来过的位置  我们可以在数轴上放石头  每次机器人被石头卡住他就跳过当前的那个指令  问  最少使用石头前提下  一共几种放石头方法 思路: 很容易想到如果最后一个指令是L  那么机器人一定会停在0点的左边  因为如果停在右边  最后一步一定走在之前来过的位置上  同理最后一个指令是R

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来,经过 n n n 个格子,所以 k k k 最小是 n n n。如果想要延长路线,可以采用九转大肠的形状,就像这样: 可以发现,每次向左走之后都必须走回来,所以每次新经过的格子数是偶数,得到 k − n k-n k−n 是偶数才有可行的方案。 首先,把整张图表的初始状态设为如下形式(即每个格点都是独立的): +++++S++o|o|o

POJ 3026 Borg Maze (BFS+MST)

把是A或者S的地方当做一个顶点存起来。 之后用BFS求任意两点的距离,把边存起来用最小生成树算法求:使得所有顶点都连通的最小花费 /************************************************ Author: fisty* Created Time: 2015/2/28 16:42:55* File Name : J.cpp**********

Aizu 2538 Stack Maze【记忆化搜索】

其实我并不知道我的姿势算是什么。 一开始想着用二维的记忆化搜索,用 dp[x][y] dp[x][y]表示 (x,y)→(H,W) (x,y)\rightarrow(H,W)能够得到的最大happy值。但是很遗憾的是,这样没法记录,在前进的路上,我有多少个宝石、能够经过多少宝石洞。 所以就想着如何记录,最后发现难以记录。如果是这样的记忆化搜索,时间复杂度大约是 O(n2) O(n^2),那么就

784 - Maze Exploration(bfs)

题目:784 - Maze Exploration 题目大意:类似走迷宫, 八个方向走,空格的表示可以走,‘X’不可以走,‘*’是起点。 解题思路:BFS; #include<stdio.h>#include<string.h>#include<queue>using namespace std;const int N = 35;const int M = 85

CodeForces 377A Maze(暴力)

题目链接:CodeForces 377A Maze 题目大意:给出一张图,将k个位置置为X,使得剩下的空位置仍能联通。 解题思路:暴力。因为题目肯定保证有答案,所以水了很多,但是它可能一开始就有不连通的块,所以先用BFS找出所有的联通块,然后按照面积从小到大排序,用DFS进行填充。 #include <stdio.h>#include <string.h>

攻防世界maze做法(迷宫题)

首先查壳64bit,直接丢进ida64中进行反编译就完事儿了,然后直接进入main函数打注释分析首先,题目已经提示了这是个迷宫题,我们抓住做迷宫题的两个要点,一找玩法,二找地图, 玩法在主函数中,四种符号要和上下左右对应,此处暂时判别不出对应关系,我们先进入函数sub_400690查看,此处的a3代表列的理由是,a3*8,a2代表行数,一行八个,地图是一个二维数组,行+列依次读取移动,这样之后,

Slash后台管理系统源码阅读笔记 后面面板中的折线图统计卡片是怎么实现的?

之前的笔记发表在博客和公众号以后,得到了一部分同学的喜爱的认可,所以今天继续。 目前这个管理系统的代码已经处理了一小部分: 接下来,我们看看第二栏那三个折线图统计卡片是怎么实现的。 这三个卡片还是使用的 antd 一行三列的布局方式,具体代码如下: {/*折线图统计卡片*/}<Row gutter={[16, 16]} className="mt-4" justify="center"