洛谷 走迷宫(深搜)https://www.luogu.org/problemnew/show/P1605
#include<iostream>
using namespace std;
#define N 6
#define M 6
int n,m,t,sx,sy,fx,fy,ans=0;
char map[N][M];//地图上的陷阱
int v[N][M];//走过的点
void dfs(int xx,int yy);
int dx[4] = {1,0,-1,0};
int dy[4] = {0,-1,0,1};
int main()
{
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
for(int i=1;i<=t;i++)
{
int a,b;
cin>>a>>b;
map[a][b] = '#';//标记陷阱
}
dfs(sx,sy);
cout<<ans<<endl;
return 0;
}
void dfs(int xx,int yy)
{
if(xx==fx&&yy==fy)
{
ans++;
}
else
{
for(int i=0;i<4;i++)
{
if(xx+dx[i]>=1&&xx+dx[i]<=n&&yy+dy[i]>=1&&yy+dy[i]<=m&&v[xx+dx[i]][yy+dy[i]] != 1&&map[xx+dx[i]][yy+dy[i]] != '#')
{ //下一个点在地图内,且没走过,且不是陷阱,则继续搜索
v[xx][yy]=1;
dfs(xx+dx[i],yy+dy[i]);
v[xx][yy]=0;
}
}
}
}
本文详细解析了洛谷网站上一道经典题目“走迷宫”的深搜算法实现。通过定义地图、陷阱、起点和终点,利用深度优先搜索(DFS)策略寻找所有可能的路径,并统计到达终点的方案数。文章展示了完整的C++代码实现,包括地图初始化、陷阱标记、深度优先搜索函数及主函数调用。
3377

被折叠的 条评论
为什么被折叠?



