回家的感觉真好

真的是目无王法了我现在:哎,什么都不在会,什么都不怕,都不去想,一声不吭的就跑回家去了。

到我再回学校的时候已经是三以后了。呵呵~~~星期四就回了,星期五没有上课,星期天下午才到校。

感觉真好,不求管辅导员,不管哪个什么条条框框,我做我喜欢做的事情,哈。。。

回家吃了两天好的,好好的休息了下下,什么都不想都不做,我还真开始怀念以前小学中学的生活了。

以下是使用C++代码实现宽度优先搜索(BFS)来解决该问题的代码: ```cpp #include <iostream> #include <queue> #include <vector> #include <cstring> using namespace std; struct Node { int x, y; // 当前位置 int dir; // 当前方向 (0:北, 1:东, 2:南, 3:西) int turns; // 已拐弯次数 }; int n, m; char grid[51][51]; bool visited[51][51][4]; // 记录是否访问过某个点的某个方向 // 方向数组,表示北、东、南、西四个方向的移动 int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; bool isValid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m && grid[x][y] != '*'; } int bfs(int startX, int startY, int endX, int endY) { queue<Node> q; // 初始时约翰可以朝任意方向出发 for (int d = 0; d < 4; ++d) { Node start = {startX, startY, d, 0}; q.push(start); visited[startX][startY][d] = true; } while (!q.empty()) { Node current = q.front(); q.pop(); if (current.x == endX && current.y == endY) { return current.turns; // 返回拐弯次数 } // 尝试朝当前方向前进 int nx = current.x + dx[current.dir]; int ny = current.y + dy[current.dir]; if (isValid(nx, ny) && !visited[nx][ny][current.dir]) { visited[nx][ny][current.dir] = true; q.push({nx, ny, current.dir, current.turns}); } // 尝试改变方向(左转或右转) for (int nd = 0; nd < 4; ++nd) { if (nd == current.dir) continue; // 不允许保持原方向 nx = current.x + dx[nd]; ny = current.y + dy[nd]; if (isValid(nx, ny) && !visited[nx][ny][nd]) { visited[nx][ny][nd] = true; q.push({nx, ny, nd, current.turns + 1}); // 拐弯次数+1 } } } return -1; // 如果无法到达终点 } int main() { cin >> n >> m; int startX, startY, endX, endY; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> grid[i][j]; if (grid[i][j] == 'S') { startX = i; startY = j; } else if (grid[i][j] == 'E') { endX = i; endY = j; } } } memset(visited, false, sizeof(visited)); int result = bfs(startX, startY, endX, endY); if (result != -1) { cout << "最少拐弯次数: " << result << endl; } else { cout << "无法到达目的地" << endl; } return 0; } ``` ### 上述代码解释: 1. **Node结构体**:定义了当前节点的位置 `(x, y)`、当前方向 `dir` 已经拐弯的次数 `turns`。 2. **isValid函数**:检查给定位置是否有效(在地图范围内且不是障碍物 `'*'`)。 3. **BFS算法**:从起点开始,尝试向四个方向扩展。如果继续沿着当前方向走,则不增加拐弯次数;如果改变方向,则拐弯次数加一。 4. **visited数组**:记录每个点在每个方向上是否已经被访问过,避免重复计算。 5. **主函数逻辑**:读取地图数据,找到起点终点,并调用BFS算法。 ### BFS的核心思想: - 使用队列进行广度优先搜索,逐层扩展可能的路径。 - 在每次扩展时,优先考虑沿当前方向前进,若需转向则增加拐弯次数。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值