此实例是解决寻找一张地图上(二维数组模拟的)从一个点到达另外指定的一个点需要的最少的移动步骤,其中地图上某点可能是障碍物不能跨越
地图信息约定:0表示空地,1表示目的地,-1表示障碍物,(0,0)表示的是默认起始点
一、深度优先搜索法
从初始起点开始对四个方向进行穷举,直到遇到目的点,递归的调用自己
#include<iostream>
using namespace std;
int min = 100000000;
int n, m;
void dfs(int a[30][30], int x, int y, int step)
{
if (a[x][y] == 1)//到达目的点
{
if (min > step)//移动步骤数比较
{
min=step;
}
return;
}
else
{
for (int i = 1; i <= 4; i++)//每个点都可能进行四个方向的移动
{
int tx = x, ty = y;
if (i == 1)//向上
tx = tx - 1;
else if (i == 2)//向下
tx = tx + 1;
else if (i == 3)//向左
ty = ty - 1;
else if (i == 4)//向右
ty = ty + 1;
if (tx < 0 || ty < 0 || tx >= n||ty >= m|| a[tx][ty] == -