利用棧解決深度搜尋問題

2021-10-11 14:28:40 字數 1164 閱讀 5329

#include

#include

struct pos

;int _col{};

pos(int row, int col) :_row(row)

, _col(col)

pos()

};std::stacks;

bool checkisaccess(int* a, int row_size, int col_size, pos cur)

//列座標不合法

if (cur._col <0 || cur._col>=col_size)

//走過路

if (a[cur._row * col_size + cur._col] >0)

return true;

}bool check_pos(int* maze, int rows, int cols, pos entry)

//試探上面

next._row–;

if (checkisaccess(maze,rows,cols, next))

//試探下面

next = cur;

next._row++;

if (checkisaccess(maze, rows, cols, next))

//試探左面

next = cur;

next._col–; //列開始減

if (checkisaccess(maze, rows, cols, next))

//試探右面

next = cur;

next._col++;

if (checkisaccess(maze, rows, cols, next))

//回溯,如果其餘三個方向均不跳出,則表示無通路

maze[cur._row * cols + cur._col] = 3;//將走過的點標記為3,也可以不標記

//如果此節點無路,就刪除節點

s.pop();

}return false;

}int main()

;bool flag = check_pos((int*)map, 10, 10, pos(1, 0));

}總結:利用棧的思想,去遍歷每個座標,可以走的座標放入棧中,然後每個取遍歷,直到此座標不能走位置,若不能走,就把此座標刪除掉,然後彈出下乙個座標即可

利用深度搜尋法解決八皇后問題

八皇后問題每行必須有乙個皇后,所以,對棋盤深蒐時,第乙個皇后的位置不妨設為第一行,這樣只對第一行進行搜尋,同理,第二個皇后不妨設為第二行,以此類推。下面附我的 includeusing namespace std struct node1 棋盤模擬,不可以放皇后的地方值為0,可以為1 struct ...

利用深度優先搜尋(dfs)來解決迷宮問題

1 從圖中某個初始頂點v出發,首先訪問初始頂點v。2 然後依次從v的未被訪問的鄰接點w,再從w出發進行深度優先遍歷,直到圖中所有與v有路徑相通的的頂點都被訪問過為止。解決問題 1 如何確定乙個頂點是否訪問過?設定乙個visited全域性陣列,visited i 0表示頂點i沒有訪問 visited ...

利用棧解決迷宮問題

迷宮問題 如圖所示 從左上角出發,然後從下面出來。利用檔案讀寫的方式,讀取迷宮,然後利用棧,進行搜尋是否能夠找到出口,上下左右四個方向進行判斷,如果找不到,就回溯。pragma once pragma once include include define n 10 struct position ...