dfs寻路算法---迷宫问题实现
2015-08-08 13:17
411 查看
本文转载自《算法竞赛入门经典》中迷宫问题的实现源代码。谢谢作者,留着学习。
#include<stdio.h> #include<string.h> #define MAXN 105 int n, m, xs, ys, xt, yt; int vis[MAXN][MAXN], fa[MAXN][MAXN], dist[MAXN][MAXN], last_dir[MAXN][MAXN], num[MAXN][MAXN]; int maze[MAXN][MAXN] = {{1,1,0,1,1},{1,0,1,1,1},{1,0,1,0,0},{1,0,1,1,1},{1,1,1,0,1},{1,1,1,1,1}}; int dx[] = {-1,1,0,0}; int dy[] = {0,0,-1,1}; char name[] = "UDLR"; int q[MAXN*MAXN]; void bfs(int x, int y) { int front=0, rear=0, d, u; u = x*m+y; vis[x][y] = 1; fa[x][y] = u; dist[x][y] = 0; q[rear++] = u; while(front<rear) { u = q[front++]; x = u/m; y = u%m; for(d = 0; d < 4; d++) { int nx = x+dx[d], ny = y+dy[d]; if(nx>=0 && nx<n && ny>=0 && ny<m && maze[nx][ny] && !vis[nx][ny]) { int v = nx*m+ny; q[rear++] = v; vis[nx][ny] = 1; fa[nx][ny] = u; dist[nx][ny] = dist[x][y]+1; last_dir[nx][ny] = d; } } } } void print_path(int x, int y) { int fx = fa[x][y]/m; int fy = fa[x][y]%m; if(fx != x || fy != y) { print_path(fx, fy); putchar(name[last_dir[x][y]]); } } int dir[MAXN*MAXN]; void print_path2(int x, int y) { int c = 0; for(;;) { int fx = fa[x][y]/m; int fy = fa[x][y]%m; if(fx == x && fy == y) break; dir[c++] = last_dir[x][y]; x = fx; y = fy; } while(c--) putchar(name[dir[c]]); } int main() { //int i, j; n = 6; m = 5; xs = 0; ys = 0; xt = 0; yt = 4; //scanf("%d%d%d%d%d%d", &n, &m, &xs, &ys, &xt, &yt); // for(i = 0; i < n; i++) // for(j = 0; j < m; j++) // scanf("%d", &maze[i][j]); memset(vis, 0, sizeof(vis)); bfs(xs, ys); print_path(xt, yt); putchar('\n'); print_path2(xt, yt); putchar('\n'); return 0; }
相关文章推荐
- Codeforces Round #245 (Div. 1)D(最近点对)
- poj 2828 Buy Tickets(动态队列·线段树单点更新)
- 综合简单聊天系统
- 方法分派
- [leedcode 224] Basic Calculator
- Android自定义控件—-RadioGroup实现APP首页底部Tab的切换
- 线段树 csu1542 Flipping Parentheses
- bs4 的一个报错
- 类加载器
- HEVC码率控制算法研究与HM相应代码分析(二)——新的码率控制模型
- 设计模式04: Factory Methord 工厂方法模式(创建型模式)
- day07-tomcat
- 9.7数学与概率(七)——检查n能否被素数整除
- [原创]SSH中HibernateTemplate与HibernateDaoSupport关系
- JAVA内存区域
- 9.7数学与概率(六)——检查一个数是否为素数
- android学习笔记(4)Intent初级学习
- 你我只是匆匆过客(原创)
- Unity编辑器-创建单独编辑框,折叠框,提示框
- Android WebView加载html文本时,图片太大不能适配屏幕