走格子(简单dfs)

题目描述 
在平面上有n*n大小的正方形,定义正方形左下角坐标是(1,1),右下角坐标是(n,1)
现在A君在左下角,他的初始方向是向右,他要在正方形内走m步


当A君碰到边界或者已经走过的格子时,他便会逆时针转90°继续走,直到走完m步。
现在给你两个整数n和m,请算出走完m步后A君的坐标。
输入描述:
输入一行两个整数n和m。
输出描述:
输出一行两个数表示A君的坐标。
示例1
输入
复制
3 3
输出
复制
3 2
备注:
n<=1000,m<n*n


思路:

直接模拟题目过程,用dfs搜索。

代码:

#include <bits/stdc++.h>

using namespace std;
const int maxn=1100;
int Map[maxn][maxn];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int n,m;
int pan(int x,int y)
{
    if(x>=1&&y>=1&&x<=n&&y<=n)
    {
        if(Map[x][y]==0)return 1;
    }
    return 0;
}
int f=0;
void dfs(int x,int y,int d,int ans)
{
    Map[x][y]=1;
    if(ans>=m)
    {
        printf("%d %d\n",x,y);
        f=1;
        return;
    }
    int xx=x+dx[d];
    int yy=y+dy[d];
    if(pan(xx,yy))
    {
        dfs(xx,yy,d,ans+1);
    }
    else
    {
        dfs(x,y,(d+1)%4,ans);
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    //Map[1][1]=1;
    dfs(1,1,0,0);
    return 0;
}


### Pac-Man 和 DFS 算法的结合 吃豆人(Pac-Man)是一款经典的迷宫追逐类游戏,其核心目标是在有限的时间内收集尽可能多的食物并避开幽灵。深度优先搜索 (Depth First Search, DFS) 是一种用于遍历图或树结构的经典算法,在解决路径规划问题时具有一定的适用性。 以下是关于如何实现基于 DFS 的 Pac-Man 路径规划的具体说明: #### 使用 DFS 实现 Pac-Man 游戏中的路径寻找 DFS 可以用来帮助 Pac-Man 找到从当前位置到达食物或其他目标位置的一条可能路径。然而需要注意的是,由于 DFS 不一定总是找到最短路径,因此它更适合于探索所有可能性或者在特定条件下快速找到一条可行解的情况。 ```python def dfs(maze, start, goal): stack = [(start, [])] visited = set() while stack: current_position, path = stack.pop() if current_position == goal: return path + [current_position] if current_position not in visited: visited.add(current_position) neighbors = get_neighbors(maze, current_position) for neighbor in neighbors: if neighbor not in visited: stack.append((neighbor, path + [current_position])) return None def get_neighbors(maze, position): rows, cols = len(maze), len(maze[0]) directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] result = [] for direction in directions: new_row = position[0] + direction[0] new_col = position[1] + direction[1] if 0 <= new_row < rows and 0 <= new_col < cols and maze[new_row][new_col] != '%': result.append((new_row, new_col)) return result ``` 上述代码展示了如何通过栈来模拟递归过程完成非递归形式的 DFS 遍历[^2]。`maze` 参数表示整个地图数据结构;`get_neighbors()` 函数返回当前节点周围有效的相邻格子列表。 #### 局限性和优化方向 尽管可以利用简单DFS 来解决问题,但在实际应用中可能会遇到一些挑战: - **效率低下**:如果地图较大,则可能导致大量不必要的回溯操作。 - **无法保证最优解**:相比 BFS 或 A* 等其他更高效的搜索方法,单纯依赖 DFS 很难确保最终得到的结果是最优路径。 为了克服这些缺点,可以在原有基础上加入剪枝策略或者其他启发式函数来进行改进[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值