解救小哈——dfs深搜
Posted boboyuzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解救小哈——dfs深搜相关的知识,希望对你有一定的参考价值。
问题描述:
小哈去玩迷宫,结果迷路了,小哼去救小哈。迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物。
问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。(注意:障碍物不能走,小哼也不能走出迷宫外,0表示空地,1表示障碍物)
输入:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
输出:
7
代码:
#include<cstdio> #include<iostream> #define INF 10000000 using namespace std; int n,m,sx,sy,ex,ey,tx,ty; int a[50][50],b[50][50]; int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//四个方向 int minn=INF; void dfs(int x,int y,int step) { if(x==ex&&y==ey) { if(step<minn) minn=step; return ; } for(int i=0;i<4;i++) { tx=x+next[i][0]; ty=y+next[i][1]; if(ty<1||tx<1||ty>m||tx>n)//越界 { continue; } if(b[tx][ty]==0&&a[tx][ty]==0)//这个位置没有走过并且是空地 { b[tx][ty]=1;//标记 dfs(tx,ty,step+1); b[tx][ty]=0; } } return ; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); } } scanf("%d%d%d%d",&sx,&sy,&ex,&ey);//起点和终点坐标 b[sx][sy]=1;//最开始在起点位置,标记 dfs(sx,sy,0); printf("%d ",minn); return 0; }
以上是关于解救小哈——dfs深搜的主要内容,如果未能解决你的问题,请参考以下文章