深度优先搜索算法
2015-09-25 10:27
369 查看
基础题:
input:
n m
下面是n行m列的矩阵,由’ . ‘和’ X ‘组成,求由(1,1)到(n,m)的最短路径
input:
n m
下面是n行m列的矩阵,由’ . ‘和’ X ‘组成,求由(1,1)到(n,m)的最短路径
#include<iostream> using namespace std; #define M 100 #define INF 10000000 // 定义四个方向,来寻找最短路径 int dir[4][2] = {0,1, 0,-1, 1,0, -1,0}; char map[M][M]; int ans,step=0,a=0; int n,m; // suppose '.'means can walk // 'X'means cannot walk // 判断x,y和map[x][y] bool judge(int x, int y) { if(x>=0 && x<n && y>=0 && y<n && map[x][y]=='.') return 1; return 0; } void dfs(int x, int y, int step) // cal the min step { if(x==n && y==m-1) { if(step < ans) ans = step; } // 每次循环都从四个方向上来寻找最短路径 for(int i=0; i<4; i++) { int tx = x+dir[i][0]; int ty = y+dir[i][1]; if(judge(tx,ty)) { step++; map[tx][ty]='x'; dfs(tx,ty,step); step--; map[tx][ty]='.'; } } } int main() { while(cin>>n>>m&&m&&n) { ans = INF; step = 0; a = 0; for(int i=0; i<n; i++) { getchar(); for(int j=0; j<m; j++) { scanf("%c", &map[i][j]); if(map[i][j]=='.') a++; } } dfs(0,0,0); if(ans!=INF) cout << ans << endl; else cout << "Cannot achieve" << endl; } }
相关文章推荐
- 八数码问题: 八数码的游戏 九宫格里面放入8个数字 启发式搜索(1)
- 八数码游戏分析—启发式搜索算法(2)
- 测试工作中的总结
- 【忽略】一些软件的下载注意事项。。。。
- MinGW 是什么?
- 在Firefox开发者的上使用CSS usage,不显示操作按钮的问题
- unity3d后期效果的重影
- Android 相关属性
- ElasticSearch安装ik分词插件
- java 内部类
- 程序员编程技术迅速提高的终极攻略
- Java面向对象三大特征:封装、继承、多态
- Java删除指定文件夹下的所有内容(包括此文件夹)
- 专业挂机软件AlwaysUp
- SpringMVC与Freemark整合,多视图完美展示详细完美解决
- Python codes
- 我常用的delphi 第三方控件
- String和StringBuffer详解
- sed
- 编译android4.4问题--【gcc】:unknow (64-bit) [FAIL]