廣搜(這個寫的最好啦)

2021-06-01 12:14:05 字數 1513 閱讀 4118

#include#include#include#includeusing namespace std;

#define max 13

int n;char start[10];char end[10];

int i,j,k;char map[max][max][max];

int dist[max][max][max];int visited[max][max][max];

int dir[6][3]=,,,,,};

class point

;point st,et;

int over(point p)

void bfs()}}

}int main()}}

getchar();//吃掉回車

char temp[max];

for(i=0;i}

}scanf("%d %d %d",&st.x,&st.y,&st.z);getchar();

scanf("%d %d %d",&et.x,&et.y,&et.z);getchar();

scanf("%s",end);getchar();

bfs();

if(dist[et.x][et.y][et.z]==-1)

cout<<"no route"

}return 0;}/*

1 笛卡爾座標系中x,y,z。但是在陣列當中先儲存的是最後乙個,讓後是前乙個讓後是最前乙個

也就是說map[z][y][x];列填滿加一行,行添滿,加一層。

2 結束的條件是到達et 而不是nnn;

所以if(p.col==et.col&&p.lay==et.lay&&p.row==et.row)

return

3 改變儲存的方式,可以使xyz乙個乙個的列出來。

*/題目翻譯輸入

這個問題的輸入包裹一系列最高100個資料集合。每乙個資料集合將會擁有下面描述的格式,並且在資料集合之間沒有空白行。

乙個資料集合有5個元素:

開始行只有一行。「start n」其中1<=n<=10.

片列——n片。每一片是乙個n*n的矩陣。這個矩陣表現啦穿過小行星區域地面的片。這個矩陣中的每乙個點將有兩個值,

『o』——空空間

『x』——小行星

開始位置——只有一行。「a b c」起始位置。中鍵有乙個空格。

目標位置——只有一行。「d e f」目標位置。中間有乙個空格。

結束線——單行線。「end」

第乙個引數表示列,左為0;

第二個引數表示行,頂為0;

第三個引數表示層,第一層為0; 輸出

對於每乙個資料集合,將有乙個輸出結合,各個輸出集合之間沒有空格。

乙個輸出集合一行。如果存在一條路徑。輸出「x y」,x就是輸入的n。y代表最小的移動數目。從起點到終點。如果沒有路徑從開始點到結束的電,那麼這一行就用「no route」代替。

乙個一下哦那個智慧型有六個方向,上下左右前後。也就是說,每一次只能夠改變乙個座標位置,而且智慧型改變1.

廣搜的優化

其實主要的思想與深搜類似 放兩個題吧 這個題思想很好 一開始我都不知道qwq include include include include include using namespace std const int n 300000 int t,r,c,n intdis n p n cnt boo...

廣搜的入門

首先先來一題例題來解釋做乙個引子吧 比如 從3開始先選擇一條路來走的話,從3到2然後繼續往後走到1到0,在1就不能繼續往後走了,就開始回溯了。從0到1,再到2,發現2還可以走到4然後再從4走到5,再返回4返回到3,再從3到6再到5。這個地方有提到用棧來優化深度優先搜尋。這個我覺得可以想想,比如走一條...

廣搜與深搜的區別

原 一般來說,廣搜常用於找單一的最短路線,或者是規模小的路徑搜尋,它的特點是 搜到就是最優解 而深搜用於找多個解或者是 步數已知 好比3步就必需達到前提 的標題,它的空間效率高,然則找到的不必定是最優解,必需記實並完成全數搜尋,故一般情況下,深搜需要很是高效的剪枝 優化 像搜尋最短路徑這些的很顯著若...