迷宫 做的第一个搜索题

Description

在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。

Input

输入的第一行为一个整数m,表示迷宫的数量。 
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。

Output

输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO

Sample Input
1 
7 
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
Sample Output
YES
 
  
//
这是一道简单的搜索题,特别的基础。
使用深度优化搜索(dfs),用栈的话,代码比较长,用递归的则代码简洁。
   
   
递归实现
DFS(int step){ //step为当前状态
if(step==ans)
return ;
if(Next合法)
DFS (Step + 1)
(Step+1在这里表示Step的下一个状态)
}
///
代码如下:
#include<stdio.h>
#include<string.h>
int flag,n;
int N[18][18];
char ch[18][18];
void dfs(int i,int j)
{
   N[i][j]=1;
   if((i+1<n)&&(ch[i+1][j]=='.')&&(N[i+1][j]==0))
            dfs(i+1,j);
   if((j-1>=0)&&(ch[i][j-1]=='.')&&(N[i][j-1]==0))
            dfs(i,j-1);
   if((i-1>=0)&&(ch[i-1][j]=='.')&&(N[i-1][j]==0))
            dfs(i-1,j);
   if((j+1<n)&&(ch[i][j+1]=='.')&&(N[i][j+1]==0))
            dfs(i,j+1);
   if((j+1==n-1&&i==n-1)||(j==n-1&&i+1==n-1))
   {
            flag=1;
            return;
   }
 
}
int main()
{
    int m;
    scanf("%d",&m);
    while(m--)
    {
        memset(N,0,sizeof(N));
        flag=0;
        scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%s",&ch[i]);
        dfs(0,0);
            if(flag)
                printf("YES\n");
            else
                printf("NO\n");
 
    }
    return 0;
}

///
比较简洁的写法,对递归函数进行修改,
#include<stdio.h>
#include<string.h>
char P[16+3][16+3];
int B[16+3][16+3];
int m, n;
void f(int x, int y) {
    if(P[x][y] != '.' || B[x][y]) return;
    B[x][y] = 1;
                 f(x-1, y);
    f(x, y-1);                 f(x, y+1);
                 f(x+1, y);
}
int main() {
    scanf("%d", &m);
    while(m--) {
        memset(P, '#', sizeof(P));
        memset(B, 0, sizeof(B));
        scanf("%d", &n);
        for(int i = 1; i <= n; ++i)
            scanf("%s", P[i]+1);
        P[1][1] = P[n][n] = '.';
        f(1,1);
        printf("%s\n",B[n][n]==1 ? "YES" : "NO");
    }
    return 0;
}


 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Python编写一个迷宫游戏。这个游戏可以通过使用Python语言实现的迷宫类、玩家类和控制器类来完成。首先,使用迷宫类绘制迷宫地图。然后使用玩家类实现玩家的方向动作。最后,使用控制器类来实现操作器,以便玩家可以方便地操作。你可以在主函数中运行代码来玩这个迷宫游戏。如果你对这个游戏感兴趣,你可以在以下链接找到游戏的源码:。这个迷宫小游戏的设计旨在使用Python开发技术实现,并展示了Python作为一种易读、易维护和广受欢迎的语言的特点。通过使用不同的模块来绘制和呈现迷宫,实现了自由操作的功能。如果你想尝试一下这个迷宫游戏,可以点击链接下载源码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python实现迷宫游戏](https://blog.csdn.net/weixin_44245270/article/details/107181752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [用 Python 制作一个迷宫游戏](https://blog.csdn.net/pythonxuexi123/article/details/113885124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值