社区讨论
站外题求助(DFS)
题目总版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m43yybk3
- 此快照首次捕获于
- 2024/11/30 17:27 去年
- 此快照最后确认于
- 2025/11/04 13:35 4 个月前
题目:
题目描述
有一张迷宫地图,其有
R
R 行
C
C 列,共
R
×
C
R×C 个格子。每个格子中为 字符 '.' 或 字符'#' ,分别表示平地、墙。
已知迷宫入口为左上角格子,出口为右下角格子。
请问,从入口走到出口,至少需要走几个格子(包括入口格子、出口格子)?若无法走到出口,请输出
−
1
−1 。
注:每一步只能移动到相邻4个方向(上、下、左、右)的格子上。
输入格式
输入共
1
+
R
1+R 行。
第1行包含两个整数,即题目中所述的
R
,
C
R,C 。
接下来的
R
R ,为这张迷宫地图。即每行包含
C
C 个字符,这些字符只可能是 字符 '.' 或 字符'#' 。
输出格式
输出包含一个整数,即至少需要走几个格子。(注:若无法走到出口,则输出
−
1
−1 )
输入输出样例
输入 #1
CPP5 5
..###
#....
#.#.#
#.#.#
#.#..
输出 #1
CPP9
输入 #2
CPP5 5
..###
#....
#.#.#
#.###
#.#..
输出 #2复制
CPP-1
说明/提示
测试数据说明:
对于前50%的测试数据,
1
≤
R
,
C
≤
5
1≤R,C≤5
对于后50%的测试数据,
5
<
R
,
C
≤
100
5<R,C≤100
代码:
CPP#include <iostream>
using namespace std;
int r,c,mincnt=114514;
char g[101][101]={'.'};
bool vis[101][101]={false},can=false;
int amns[101][101]={0};
int f[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int dx,int dy,int cnt){
if(dx==r && dy==c){
return;
}
vis[dx][dy]=true;
for(int i=0;i<4;i++){
int fx=f[i][0]+dx;
int fy=f[i][1]+dy;
if(fx>=1 && fx<=r && fy>=1 && fy<=c){
if(!vis[fx][fy] && g[fx][fy]=='.' && amns[dx][dy]+1<amns[fx][fy]){
amns[fx][fy]=amns[dx][dy]+1;
dfs(fx,fy,cnt+1);
}
}
}
vis[dx][dy]=false;
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>g[i][j];
}
}
dfs(1,1,0);
if(amns[r][c]!=0)cout<<amns[r][c];
else cout<<"-1";
return 0;
}
求助!
回复
共 0 条回复,欢迎继续交流。
正在加载回复...