#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步就必需達到前提 的標題,它的空間效率高,然則找到的不必定是最優解,必需記實並完成全數搜尋,故一般情況下,深搜需要很是高效的剪枝 優化 像搜尋最短路徑這些的很顯著若...