POJ 3984 迷宫问题 搜索题解
2014-08-11 10:23
357 查看
本题可以使用BFS和DFS解题,也可以构建图,然后利用Dijsktra解题。
不过因为数据很少,就没必要使用Dijsktra了。
BFS和DFS效率都是一样的,因为都需要搜索所有可能的路径,并记录最短路径和当前路径。
推荐使用DFS,感觉会方便很多,BFS会麻烦很多,因为需要记录并比较路径。
不过因为数据很少,就没必要使用Dijsktra了。
BFS和DFS效率都是一样的,因为都需要搜索所有可能的路径,并记录最短路径和当前路径。
推荐使用DFS,感觉会方便很多,BFS会麻烦很多,因为需要记录并比较路径。
#include <stdio.h> #include <string.h> #include <limits.h> const int MAX_N = 5; const int MAX_RES = MAX_N*MAX_N; int Maze[MAX_N][MAX_N]; int Row[MAX_RES], Col[MAX_RES], resRow[MAX_RES], resCol[MAX_RES], N; const int BLOCK = 1; const int UNBLOCK = 0; inline bool isLegal(int r, int c) { return 0<=r && 0<=c && r<MAX_N && c<MAX_N && Maze[r][c] == 0; } void getPath(int path = 0, int r = 0, int c = 0) { Row[path] = r, Col[path] = c; if (r == MAX_N - 1 && c == MAX_N - 1) { if (path+1 < N) { N = path+1; memcpy(resRow, Row, sizeof(int)*N); memcpy(resCol, Col, sizeof(int)*N); } return ; } Maze[r][c] = BLOCK; if (isLegal(r, c+1)) getPath(path+1, r, c+1); if (isLegal(r+1, c)) getPath(path+1, r+1, c); if (isLegal(r, c-1)) getPath(path+1, r, c-1); if (isLegal(r-1, c)) getPath(path+1, r-1, c); Maze[r][c] = UNBLOCK; } int main() { for (int i = 0; i < MAX_N; i++) { for (int j = 0; j < MAX_N; j++) { scanf("%d", Maze[i]+j); } } N = INT_MAX; getPath(); if (N != INT_MAX) { for (int i = 0; i < N; i++) { printf("(%d, %d)\n", resRow[i], resCol[i]); } } return 0; }
相关文章推荐
- poj 3984 迷宫问题 BFS 图的广度优先搜索
- [搜索] POJ 3984 迷宫问题
- poj 3984 迷宫问题 宽度搜索 一个终点
- 搜索最短路径:迷宫问题 POJ - 3984
- [kuangbin带你飞]专题1 简单搜索 K - 迷宫问题 POJ - 3984
- POJ 3984 迷宫问题(记录路径的搜索)
- [kuangbin带你飞]专题一 简单搜索 K - 迷宫问题 POJ 3984
- POJ 3984 迷宫问题(广度搜索)
- POJ - 3984 迷宫问题 [kuangbin带你飞]专题一 简单搜索
- poj_3984_迷宫问题(搜索)
- 搜索练习3 /poj.org/problem 3984 迷宫问题/bfs 回溯找路经
- K - 迷宫问题 POJ - 3984(广度搜索)
- [kuangbin带你飞]专题一 简单搜索K - 迷宫问题(POJ 3984)
- poj 3984 迷宫问题 —— 典型搜索--DFS递归
- POJ 3984 迷宫问题(kuangbin带你飞 专题一:简单搜索)
- poj 3984 迷宫问题 —— 典型搜索--DFS递归
- [kuangbin]专题一 简单搜索 K - 迷宫问题 POJ - 3984
- poj 3984 -- 迷宫问题 (bfs)
- poj 3984 迷宫问题 没全部想清楚还
- POJ 3984-迷宫问题 BFS