關於迷宮問題的dfs,用陣列的方式來做,在之前的部落格上有寫過。
下面直接來看這道題目
書上這個是用佇列的方式來寫,由於之前對stl不是特別熟悉,所以對於佇列的寫法有些生疏。因此在此筆記中,通過書上**實現,並加詳細注釋的方式來進行學習。
大致的思路就如上圖所示
那麼下面是**(含詳細注釋)
如果要賦值貼上**:
#includeusing namespace std;
char room[23][23]; //給房間定義陣列大小為23,由於行列方向最大只有20,所以取稍大即可
int dir[4][2]=,,,};//四個方向分別是左上右下,這個方向的判斷是根據x,y的單位長度變化
int wx,hy,num; //定義行wx列hy與總數變數num
#define check(x,y) (x=0&&y>=0&&yq;//定義佇列,用來存放座標點
node start,next;//定義結構體變數,開始座標點start與下乙個座標點next
start.x=dx;//給開始座標賦初值
start.y=dy;
q.push(start);//將開始座標點放入佇列
while(!q.empty())//佇列不為空則持續迴圈}}
num=0;
bfs(dx,dy);//從起點座標開始搜尋
cout<
}return 0;
}
藍橋杯 BFS 迷宮
本題為2019年省賽b組e題 要求按字典序列印軌跡 問題描述 下圖給出了乙個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可 以通行的地方。010000 000100 001001 110000 迷宮的入口為左上角,出口為右下角,在迷宮中,只能從乙個位置走到這 個它的上 下 左 右四個方向...
藍橋杯 BFS 八數碼問題(演算法筆記8)
題目中輸入初始狀態和目標狀態,返回最少的移動步數。這與迷宮問題的最短路勁有些許相似,但這裡更多的是一種狀態的思考,本題涉及到 康托展開 這個特殊的雜湊函式。但是,思路有了不代表能做對,因為ac還要考慮時間複雜度,空間複雜度問題,不過一般空間複雜度都沒太大的問題。那麼為什麼這裡說不能做對?這裡參考書上...
BFS演算法 藍橋杯長草問題
小明有一塊空地,他將這塊空地劃分為 nn 行 mm 列的小塊,每行和每列的長度都為 1。小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上 下 左 右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。請告訴...