思路分析:
本題可以採取bfs的方式進行解題,我們把每乙個節點的下一層節點全部遍歷完,並讓它們不再次遍歷(設定標誌陣列)。bfs的解決方法是利用佇列知識,每次讀取乙個資料,並讓該資料出隊,然後把該節點的子節點依次入隊,直到最後遍歷完畢。
下面貼上**:
1 #include2 #include3 #include4using
namespace
std;
5#define maxn 105
6int dx = , dy = ;
7char name = ;
8int q[maxn * maxn]; //
佇列,儲存當前結點編號
9int
vis[maxn][maxn], nmap[maxn][maxn];
10int m, n; //
行、列數
11int dir[maxn *maxn];
12int
fa[maxn][maxn], dis[maxn][maxn], last_dir[maxn][maxn];
13void
funcinit();
14void bfs(int x, int
y);15
void
funcinput();
16void print_path(int x, int
y);17
intmain()
1825
void
funcinit()
2632}33
void bfs(int x,int
y)3457}
58}59}
60void
funcinput()
6170}71
}72void print_path(int x,int
y)73
83while(c--)
8489 cout<<"
最短路徑長度為:
"<1][n-1]<90 }
注意:需要自己看懂bfs大致模板。
演算法競賽 走迷宮
乙個網格迷宮由n行m列的單元格組成,每個單元格要麼是空地 用1表示 要麼是障礙物 用0表示 任務是找一條從起點到終點的最短移動序列,其中udlr代表上下左右移動到 相鄰單元格。任何時候都不能在障礙物格中,也不能走到迷宮之外。起點和終點保證是空地 n,m 100 圖的bfs與樹的bfs一樣,但需要避免...
經典演算法 (六)老鼠走迷宮
問題描述 給定乙個二維陣列,陣列中2表示牆壁,0表示通路,由此陣列可展示為乙個迷宮圖。給定入口位置和出口位置,判斷之間是否存在通路並顯示出走出迷宮的道路。問題解答 實際上是使用回溯演算法求解該問題,就是在上下左右四個方向試探,倘若有路則走一步,在新的位置繼續在四個位置試探,並且對走過的路進行標記,倘...
《演算法競賽入門經典》 豎式問題
題目 找出所有形如abc de 三位數乘以兩位數 的算式,使得在完整的豎式中,所有數字都屬於乙個特定的數字集合。輸入數字集合 相鄰數字之間沒有空格 輸出所有豎式。每個豎式前應有編號,之後應有乙個空行。最後輸出解的總數。具體格式見樣例輸出 為了便於觀察,豎式中的空格改用小數點顯示,但你的程式應該輸出空...