迷宫的最短路径
2013-11-05 19:47
169 查看
问题描述:
给定一个大小为N*M的迷宫,每一步可以走上下左右四个方向,假设一定可以到到达终点,求达到终点的最小步数
输入:
S为起点,G为终点
思路:
使用深入优先搜索的方法
代码:
给定一个大小为N*M的迷宫,每一步可以走上下左右四个方向,假设一定可以到到达终点,求达到终点的最小步数
输入:
S为起点,G为终点
思路:
使用深入优先搜索的方法
代码:
# include <iostream> # include <fstream> using namespace std; int N, M; char map[100][100]; int isUsed[100][100] = {0}; int DFS_Search(int i, int j) { isUsed[i][j] = 1; if ( map[i][j] == 'G' ) { return 0; } else { int MinDistance = 9999; if ( i - 1 >= 0 && map[i-1][j] != '#' && isUsed[i-1][j] == 0) { int dis = DFS_Search(i-1, j) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( i + 1 <= N - 1 && map[i+1][j] != '#' && isUsed[i+1][j] == 0) { int dis = DFS_Search(i+1, j) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( j - 1 >= 0 && map[i][j-1] != '#' && isUsed[i][j-1] == 0) { int dis = DFS_Search(i, j-1) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( j + 1 <= M - 1 && map[i][j+1] != '#' && isUsed[i][j+1] == 0) { int dis = DFS_Search(i, j+1) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } return MinDistance; } } int main() { ifstream cin("MiGong_Data.txt"); cin>>N>>M; for ( int i = 0; i < N; i++) { for ( int j = 0; j < M; j++) { cin>>map[i][j]; } } int result = DFS_Search(0, 1); cout<<result<<endl; return 0; }
相关文章推荐
- 算12/24点算法 布线问题/迷宫最短路径
- 迷宫最短路径问题(ShortestPath)的求解——利用链式队列
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- DFS走迷宫问题(非最短路径)
- [数据结构]求解迷宫最短路径问题
- 迷宫的最短路径 bfs
- 用并查集(find-union)实现迷宫算法以及最短路径求解
- 递归和栈求解迷宫的最短路径
- Unity3D之迷宫寻路_A*最短路径寻路
- 迷宫的最短路径
- 队列求解迷宫最短路径
- 035_迷宫最短路径
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 迷宫最短路径问题解析
- BFS 迷宫的最短路径问题
- 迷宫最短路径算法(使用队列)
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- 仙岛求药(迷宫寻找最短路径)DFS
- 迷宫问题,求最短路径长度、最短路径条数、所有最短路径,DFS+BFS+栈+队列
- 搜索最短路径:迷宫问题 POJ - 3984