迷宫(maze)
题目描述
最近,小Y在玩一款迷宫游戏,游戏是在一个n*m的网络上进行的,每个格子可能是空地或者障碍物。游戏一开始,玩家控制的角色位于图中的某块空地上。在游戏过程中,玩家可以用上下左右键控制角色向相邻且没有障碍物的格子移动(当然,角色不能移动到地图之外,也不能对角线移动)。游戏的目标是收集地图上出现的星星(每个星星只能收集一次),收集的数量越多分数越高。小Y刚开了一局游戏,假设游戏时间没有限制,他想知道自己最多能收集到多少个星星。
输入格式
第一行包含两个正整数n和m,表示游戏的地图包含n行m列。 接下来给出一个n*m的字符矩阵,每个字符可能为以下几种: #:表示该位置有障碍物 .(英文句号):表示该位置是空地 *:表示该位置是空地,且生成了一颗星星 S(大写):表示该位置是空地,且玩家初始时位于该位置,保证图中有且只有一个S
输出格式
共一行,包含一个整数,表示最多能收集到多少颗星星
输入样例
4 8
..#...*.
*.#.S#..
######..
.*..#.*.
输出样例
2
数据范围
对于50%的数据,n,m<=40; 对于100%的数据,1<=m,m<=200
主要思路
初看题目,便认出这是一道搜索模板题 再看数据,嗯,一定是!!!
先定义方向数组(上下左右)
int fx[4][2]={0,1,1,0,-1,0,0,-1};
再输入数据,有a[][]储存,并记录起点
cin>>c;
if(c=='.')a[i][j]=1;
if(c=='S')x=i,y=j;
if(c=='*')a[i][j]=2;
最后搜索 and 输出 return 0;
BBBBBBB
——————AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1001][1001],x,y,ans,fx[4][2]={0,1,1,0,-1,0,0,-1};char c;
void dfs(int x,int y){
if(a[x][y]==2)ans++;
a[x][y]=0;
for(int i=0;i<4;i++){
int xx=x+fx[i][0],yy=y+fx[i][1];
if(a[xx][yy])dfs(xx,yy);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>c;
if(c=='.')a[i][j]=1;
if(c=='S')x=i,y=j;
if(c=='*')a[i][j]=2;
}
dfs(x,y);
cout<<ans;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122237
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话