定义一个二维数组:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4) 这种找出路径并且输出,一般我们都只会用bfs,实际上dfs也是可以解决的
但是这样解题是有缺陷的,因为这个题目只有一条路,已经确定了,所以可以用dfs,若是求不止一条的最短路,就不行
dfs 方法可以学习一下
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std; int path[100][2],a[10][10],ans;
bool vis[10][10],flag=0;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0}; bool judge(int x,int y)
{
if(x>=0&&y>=0&&x<=4&&y<=4&&!flag&&!vis[x][y]&&!a[x][y]) return 1;
return 0;
} void dfs(int x,int y,int step)
{
path[step][0]=x;
path[step][1]=y;
if(x==4&&y==4)
{
flag=1;
ans=step;
return ;
}
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i]; if(judge(tx,ty))
{
vis[tx][ty]=1;
dfs(tx,ty,step+1);
vis[tx][ty]=0;
}
}
}
int main()
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
dfs(0,0,1); for(int i=1;i<=ans;i++)
{
printf("(%d, %d)\n",path[i][0],path[i][1]);
}
return 0;
}

  

bfs 也挺好的,可以学习学习
#include<stdio.h>
#include<string.h>
#include<queue>
#include<vector>
using namespace std;
int t[4][2]={0,1,1,0,-1,0,0,-1};
typedef pair<int,int> ee;
int vis[10][10];
int a[10][10];
int d[10][10];
ee b[10][10];
ee exa;
void bfs()
{
int sx=0,sy=0;
int tx,ty;
memset(vis,0,sizeof(vis));
queue<ee>q;
q.push(ee(sx,sy));
vis[sx][sy]=true;
d[sx][sy]=0; while(!q.empty())
{
exa=q.front();q.pop();
if(exa.first==4&&exa.second==4) break; for(int i=0;i<4;i++)
{
tx=exa.first+t[i][0];
ty=exa.second+t[i][1]; if(ty<0||tx<0||ty>5||tx>5) continue;
if(vis[tx][ty]) continue;
if(a[tx][ty]==1) continue; vis[tx][ty]=true;
d[tx][ty]=d[exa.first][exa.second]+1;
b[tx][ty]=exa;
q.push(ee(tx,ty));
}
}
return;
}
void print()
{
vector<ee> node;
while(1)
{
node.push_back(exa);
if(d[exa.first][exa.second]==0) break;
exa=b[exa.first][exa.second];
}
// node.push_back(ee(sx,sy)); for(int i=node.size()-1;i>=0;i--)
{
printf("(%d, %d)\n",node[i].first,node[i].second);
}
} int main()
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
bfs();
print();
return 0;
}

  

迷宫问题 dfs bfs 搜索的更多相关文章

  1. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  2. HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))

    Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  4. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票

    题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)  比如,下面两张图中,粉红色所示部分就是合格的剪取.  请你计算,一共有多少 ...

  6. POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE

    POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...

  7. DFS/BFS+思维 HDOJ 5325 Crazy Bobo

    题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...

  8. ID(dfs+bfs)-hdu-4127-Flood-it!

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...

  9. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

    从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...

随机推荐

  1. linux下修改时间和时区

    一.修改linux的时间在root用户下,使用date指令:date -s1.只修改日期,不修改时间,输入: date -s -- 2.只修改时间,输入: date -s :: 3.同时修改日期时间, ...

  2. linux下将指定目录加入环境变量的方法

    每个用户目录下都有一个对应的.bash_profile比如root用户对应/root/.bash_profile,普通用户cqh对应/home/cqh/.bash_profile,以root用户为例v ...

  3. 将tomcat添加为linux系统服务

    前言 在博客 --> virtualBox安装centos,并搭建tomcat中,讲到了centos下搭建tomcat环境,发现启动tomcat不是那么方便,要是忘记路径了,那就更麻烦了!当然了 ...

  4. fiddler对Iphone6s进行抓包教程

    1.下载fiddler_4.6,点击下一步直接安装. 2.打开fiddler,选择tools-options,在https中勾选decrypt https traffic和ignore server ...

  5. Jmeter获取接口返回数组的长度

    添加BeanShell PostProcessor来获取,具体代码如下: import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath ...

  6. 图片上传预览js

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. C# 数据库并发的解决方案(通用版、EF版)

    自ASP.NET诞生以来,微软提供了不少控制并发的方法,在了解这些控制并发的方法前,我们先来简单介绍下并发! 并发:同一时间或者同一时刻多个访问者同时访问某一更新操作时,会产生并发! 针对并发的处理, ...

  8. 性能监控(5)–JAVA下的jstat命令

    jstat的基本语法为 Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [& ...

  9. Strange Way to Express Integers(中国剩余定理+不互质)

    Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...

  10. 关于CSS3的filter(滤镜) 属性

    修改所有图片或者元素的颜色为黑白 (100% 灰度) DOM{ -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ filter: ...