複雜迷宮就是有多條通路的迷宮,而且要求解最短路的話就要用遞迴集合棧,用遞迴探測,尋找所有通路,用棧儲存所走過的路徑,具體方法為:
(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其實並非如此...