zoukankan      html  css  js  c++  java
  • 走出迷宫

    这道题的存在有点很搞笑哟,好像几个月都没写过题了,所以拿这道题来练哈手,找点子感觉,嘻嘻嘻。
    总体来说:

    • 这道题就是一个套用深搜模板滴题,不过与以往的深搜模板题不同的是,这是一个多组数据的输入,所以会有几个注意点。

    题目:链接:https://ac.nowcoder.com/acm/problem/14572
    来源:牛客网

    小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。
    小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。
    障碍物不能通过。小明如果现在在点(x,y)处,那么下一步只能走到相邻的四个格子中的某一个:(x+1,y),(x-1,y),(x,y+1),(x,y-1);
    小明想要知道,现在他能否从起点走到终点。

    输入示例:

    3 3
    S..
    ..E
    ...
    3 3
    S##
    ###
    ##E
    

    输出:
    Yes
    No

    以下是运行成功的代码:

    #include <cstdio>
    #include <iostream>
    #include <queue>
    #include <cstring>
    
    #define close_stdin ios::sync_with_stdio(false)
    
    using namespace std;
    void dfs(int zx, int zy);
    static int n, m; static char map[510][510], c;
    bool vis[510][510];
    int sx[4] = { 0,0,1,-1 }, sy[4]  = { 1,-1,0,0 };
    int zx, zy, flag = 0;
    
    void inmap(int n, int m)
    {
    	for (int i = 1; i <= n; i++)
    	{
    		for (int j = 1; j <= m; j++)
    		{
    			cin >> c; map[i][j] = c;
    			if (c == 'S') {
    				zx = i, zy = j;
    			}
    		}
    	}
    }
    
    void clean()//因为多组数据输入,所以这部分注意要清零
    {
            flag=0;//自己在这个地方卡到了,晓得之后就觉得自己真是个憨憨,一直盯着memset康了
    	memset(vis, 0, sizeof(vis));
    	dfs(zx, zy);
    	//cout << (flag ? "Yes
    " : "No
    ");
    	if (flag == 1)
    		cout << "Yes" << endl;
    	else
    		cout << "No" << endl;
    }
    
    bool inmap_(int i, int j)//判断是否在地图中,单独写出一部分,方便明了
    {
    	return(i >= 1 && i <= n && j >= 1 && j <= m);
    }
    void dfs(int zx, int zy)
    {
    	vis[zx][zy] = 1;
    	for (int i = 0; i < 4; i++) {
    		int nx = zx + sx[i];
    		int ny = zy + sy[i];
    		if (inmap_(nx, ny) && vis[nx][ny]!=1 && map[nx][ny] != '#')
    		{
    			if (map[nx][ny] == 'E')
    			{
    				flag = 1; return;
    			}
    			else dfs(nx, ny);
    			vis[zx][zy] = 0;
    		}
    	}
    }
    
    int main()
    {
    	close_stdin;
    	while (cin >> n >> m)
    	{
    		inmap(n, m);
    		clean();
    	}
    }
    
    

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    选择排序--简单(c语言)
    冒泡排序--简单(c++)
    冒泡排序--简单(c语言)
    直接插入排序--简单(c++)
    Microsoft Azure File 服务简介
    【 D3.js 选择集与数据详解 — 1 】 使用datum()绑定数据
    物联网操作系统HelloX V1.77(beta)版本发布
    对XX证券报关于物联网操作系统的几个问题的答复
    使用 Azure Site Recovery 将内部部署虚拟化工作负荷迁移至 Azure
    使用 Azure Site Recovery 灾难恢复至 Azure 的功能现已正式发布
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/14356583.html
Copyright © 2011-2022 走看看