迷宫问题
来源:互联网 发布:中世纪2原版优化第十版 编辑:程序博客网 时间:2024/04/29 17:22
问题描述:在n*m的迷宫中解救人质,人质在(p,q)处,你现在在(x,y)处,中间你会碰到墙,需要绕道走,求最快解救人质需要走的步数(墙表示为1)。
方案一:DFS
//迷宫问题 (x,y)——>(p,q) dfs#include <iostream>#include <string.h>using namespace std;#define N 11int vis[N][N],a[N][N];int vir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int n,m,x,y,p,q;int ans=1000000;void dfs(int nx,int ny,int step);int check(int nx,int ny);int main(){while(cin>>n>>m){int i,j;for(i=1;i<=n;i++){for(j=1;j<=m;j++){cin>>a[i][j];}}cin>>x>>y>>p>>q; dfs(x,y,0);cout<<ans<<endl;} return 0;} void dfs(int nx,int ny,int step){if(nx==p && ny==q){ if(ans>step) ans=step; return ;}int i;for(i=0;i<4;i++){int fx=nx+vir[i][0];int fy=ny+vir[i][1];if(check(fx,fy)==1 && vis[fx][fy]==0){vis[fx][fy]=1;dfs(fx,fy,step+1);vis[fx][fy]=0;}}return ;}int check(int nx,int ny){if(nx<1 || ny<1 || nx>n || ny>m || a[nx][ny]==1)return 0;else return 1;}
方案二:BFS
//迷宫问题 (x,y)——>(p,q) bfs#include <iostream>#include <string.h>#include <queue>using namespace std;#define N 11struct node{int xx,yy;int step;};int vis[N][N],a[N][N];int vir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int n,m,x,y,p,q;queue<node>qq;void bfs();int check(int nx,int ny);int main(){while(cin>>n>>m){int i,j;for(i=1;i<=n;i++){for(j=1;j<=m;j++){cin>>a[i][j];vis[i][j]=0;}}cin>>x>>y>>p>>q; bfs();}return 0;} void bfs(){struct node aa,b,c;aa.xx=x;aa.yy=y;aa.step=0;vis[x][y]=1;qq.push(aa);int i;while(!qq.empty()){b=qq.front();qq.pop();if(b.xx==p && b.yy==q){cout<<b.step<<endl;}for(i=0;i<4;i++){int fx=b.xx+vir[i][0];int fy=b.yy+vir[i][1];if(check(fx,fy)==1 && vis[fx][fy]==0){c.xx=fx;c.yy=fy;c.step=b.step+1;vis[fx][fy]=1;qq.push(c);}}}}int check(int nx,int ny){if(nx<1 || ny<1 || nx>n || ny>m || a[nx][ny]==1)return 0;else return 1;}
0 0
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题...
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- jieba提取关键词时筛选词性时单词性选择的一点注意事项
- C++中的函数重载中为什么不考虑返回值类型?
- Android 图片资源文件夹(hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi)对应的手机分辨率
- cesiumjs学习笔记之一——环境搭建
- 安卓开发定义一个全局的捕获异常,提升客户体验
- 迷宫问题
- 二叉搜索树的前序遍历
- Iserver产品模块划分
- 使用nexus搭建maven私服、手动更新索引
- 网卡数据捕获
- JavaSE教程-04Java中循环语句for,while,do···while-练习2
- 多线程的简单认识(二)
- leetcode485. Max Consecutive Ones
- Codeforces 523C&D C.Name Quest【贪心】、D.Statistics of Recompressing Videos【模拟】