TZOJ 6948: 走迷宫/深搜模板

描述

 

有一个迷宫,图案如图5.2.6所示,红色区域表示不能通行,蓝色区域表示能通行,在迷宫中通行的方向是上下左右四个方向。

image.png

从入口(1,1)位置进入迷宫,编程判断能否从出口位置成功走出。

迷宫图案中的通行区域用数字表示:1是可以通行的点,0是不能通行的点。

 

 

输入

 

 

输入为一10*10的01图像。

 

 

输出

 

 

如果能走出请输出"successful!",否则输出"fail!"。

 

 

样例输入

 

0000000000
0110111010
0110111010
0111100110
0100011110
0111011110
0101110110
0100010010
0011111110
0000000000

样例输出

successful!
 
复制代码
#include<bits/stdc++.h>
using namespace std;
//nex在原位置的基础上行列坐标的变换需要增减的量 
int nex[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; //方向数组右、下、左、上 行列坐标
char a[15][15]; //地图 \0
int vis[15][15]; //标记数组 0
int f; //f一般作为是否到达终点的标记 0
void dfs(int x,int y); //声明一个返回空类型的函数dfs 
int main()
{
    //1.输入地图
    for(int i=1;i<=10;i++) //行数是1-10,最小行数1
        for(int j=1;j<=10;j++) // 最小点位是(1,1),最大点位是(10,10)
        {
            cin>>a[i][j]; //输入第i行的第j个点 
        } 
    //2.dfs()开搜
    dfs(2,2); //将起点(1,1)传入
    //3.判断f
    if(f==1) cout<<"successful!";
    else cout<<"fail!";
    return 0;
}
void dfs(int x,int y)
{
    if(f==1)return; //如果f已经为1证明已经寻找到了终点,直接返回程序 
    if(x==9&&y==9)
    {
        f = 1; //f=1证明找到结果
        return; //结束dfs程序 
    }
    for(int i=0;i<4;i++) //循环方向数组vis
    {
        int tx = x + nex[i][0]; //下一步的行坐标tx
        int ty = y + nex[i][1]; //下一步的列坐标ty
        if(tx<1||tx>10||ty<1||ty>10)continue; //最小点位是(1,1),最大点位是(10,10)
        if(a[tx][ty]=='1' && vis[tx][ty]==0)//在地图上可行且没有走过/标记过的点
        {
            vis[tx][ty] = 1; //标记(tx,ty)走过
            dfs(tx,ty); //递归将下一步(tx,ty)作为起点传入dfs中 
        } 
    } 
} 
复制代码

 

posted @   CRt0729  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示