栈的应用dfs - C++实现

深搜dfs

都用到了上一篇的mystack栈

1. 不打印路径的版本

#include 
#include 
#include "mystack"
#define MAXROW 10
#define MAXLINE 10
using namespace std;

typedef struct _Point
{
    int _x;
    int _y;
}Point;

int maze[MAXROW][MAXLINE] = {
    1,1,1,1,1,1,1,1,1,1, 
    0,0,0,1,1,1,1,1,1,1, 
    1,1,0,1,1,1,1,1,1,1,
    1,1,0,0,0,0,1,1,1,1, 
    1,1,0,1,1,0,1,1,1,1, 
    1,1,0,1,1,0,1,1,1,1,  
    1,1,1,1,1,0,1,1,1,1, 
    1,1,1,1,1,0,0,0,1,1,
    1,1,1,1,1,1,1,0,0,0,
    1,1,1,1,1,1,1,1,1,1,
};

Stack s;
Point sp = {1, 0}, ep = {8, 9};

void displyMaze(){
    for(int i=0; i< MAXROW; i++){
        for(int j=0; j= 0 && maze[t._x-1][t._y]==0)  // 上
        {
            visit(t._x-1, t._y);
        }
        if (t._x+1 <= 9 && maze[t._x+1][t._y]==0)  // 下
        {
            visit(t._x+1, t._y);
        }
        if (t._y-1 >= 0 && maze[t._x][t._y-1]==0)  // 左
        {
            visit(t._x, t._y-1);
        }
        if (t._y+1 <= 9 && maze[t._x][t._y+1]==0)  // 右
        {
            visit(t._x, t._y+1);
        }

        if (t._x == ep._x && t._y == ep._y)
        {
            flag = 1;
            clear(&s);
            break;
        }
        
    }
    if (flag==1)
    {
        cout << "find path" << endl;
    }else{
        cout << "NOT found" << endl;
    }
    return 0;
}

栈的应用dfs - C++实现_第1张图片

2. 打印路径的版本

另外维护一个二维数组,上面每个点记录走到这个点的前一步,最后倒推就可得到正确路径

通过栈的方式可以把倒序的路径正序输出

#include 
#include 
#include 
#include "mystack"
#define MAXROW 10
#define MAXLINE 10
using namespace std;

// 栈的链式存储

typedef struct _Point
{
    int _x;
    int _y;
}Point;

Point prePts[MAXROW][MAXLINE];
int maze[MAXROW][MAXLINE] = {
        1,1,1,1,1,1,1,1,1,1,
        0,0,0,1,1,1,1,1,1,1,
        1,1,0,1,1,1,1,1,1,1,
        1,1,0,0,0,0,1,1,1,1,
        1,1,0,1,1,0,1,1,1,1,
        1,1,0,1,1,0,1,1,1,1,
        1,1,1,1,1,0,1,1,1,1,
        1,1,1,1,1,0,0,0,1,1,
        1,1,1,1,1,1,1,0,0,0,
        1,1,1,1,1,1,1,1,1,1,
};

Stack s;
Point sp = {1, 0}, ep = {8, 9};

void displyMaze(){
    for(int i=0; i< MAXROW; i++){
        for(int j=0; j= 0 && maze[t._x][t._y-1]==0)  // 左
        {
            visit(t._x, t._y-1, t);
        }
        if (t._y+1 <= 9 && maze[t._x][t._y+1]==0)  // 右
        {
            visit(t._x, t._y+1, t);
        }
        if (t._x-1 >= 0 && maze[t._x-1][t._y]==0)  // 上
        {
            visit(t._x-1, t._y, t);
        }
        if (t._x+1 <= 9 && maze[t._x+1][t._y]==0)  // 下
        {
            visit(t._x+1, t._y, t);
        }

        if (t._x == ep._x && t._y == ep._y)
        {
            flag = 1;
            clear(&s);
            break;
        }

    }
#endif

    if (flag==1)
    {
        cout << "find path" << endl;
    }else{
        cout << "NOT find" << endl;
    }

    displyPath();

    return 0;
}

栈的应用dfs - C++实现_第2张图片

你可能感兴趣的:(数据结构)