複雜迷宮問題的遞迴實現以及最短路徑

2021-07-28 09:07:26 字數 1617 閱讀 4715

複雜迷宮就是有多條通路的迷宮,而且要求解最短路的話就要用遞迴集合棧,用遞迴探測,尋找所有通路,用棧儲存所走過的路徑,具體方法為:

(1)從當前點為起點探測由它開始能前進的點(這裡的探測方向為上,有,左,下);

(2)找到能前進的點之後,首先將這個點的座標壓入棧(path)中儲存起來,並將這個點的值賦為前乙個點的值加1;遞迴呼叫這個函式,繼續探測;

(3)當前結點不能前進之後,將path中的點彈出棧,探測它的另乙個可以前進的方向;

(4)當前結點為出口時,比較棧path和棧shortestpath的size,將值較小的棧賦值給shortestpath;

具體**如下:

#include 

#include

using

namespace

std;

const

int n = 10;

int mazemap[n][n] =,,

,,,,

,,,,

};void printmap(int maze[n], size_t n)

cout

<< endl;

}}struct pos

;bool isgoingr(int maze[n], size_t n, pos cur, pos next)

}return

false;

}bool getthewayr(int maze[n], size_t n, pos pos, stack

& path,stack

& shortestpath)

}pos next;

//上next = pos;

next.i = pos.i - 1;

if (isgoingr(maze, n, pos, next))

}//右

next = pos;

next.j = pos.j + 1;

if (isgoingr(maze, n, pos, next))

}//左

next = pos;

next.j = pos.j - 1;

if (isgoingr(maze, n, pos, next))

}//下

next = pos;

next.i = pos.i + 1;

if (isgoingr(maze, n, pos, next))

}path.pop();

return0;}

void test()

; getthewayr(mazemap, n,entry,path,shortestpath);

cout

<< endl;

printmap(mazemap, n);

}

執行結果:

這裡我們可以清楚地看到所走過的路徑。

而且我們可以看到,棧shortestpath中儲存著最短路徑的座標。

非遞迴迷宮問題實現

模組化,重整程式 class lstack def init self,top 1,full 20 self.top top self.stack self.full full def is full self return self.full self.top 1 def is empty sel...

Google Hacking 的實現以及應用 轉

前言 google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非...

google hacking的實現以及應用

google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名 的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非如此...