給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,gloria是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,gloria所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。gloria能從乙個位置走到另外乙個位置嗎?
input
第1行為乙個整數t (1 ≤ t ≤ 100),表示測試資料的個數,接下來為t組測試資料,每組測試資料中,
第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字元,其中字元'.'表示該位置為空地,字元'*'表示該位置為障礙,輸入資料中只有這兩種字元,每組測試資料的最後一行為5個整數k, x 1, y 1, x 2, y 2 (1 ≤ k ≤ 10, 1 ≤ x1, x 2 ≤ n, 1 ≤ y 1, y 2 ≤ m),其中k表示gloria最多能轉的彎數,(x 1, y 1), (x 2, y2)表示兩個位置,其中x 1,x 2對應列,y 1, y 2對應行。
output
每組測試資料對應為一行,若gloria能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。
sample input
2sample output5 5...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5...**
*.**.
.....
.....
*....
2 1 1 1 3
noyes
#include#include#include#includeusing namespace std;
char maze[101][101];//地圖面積
int vis[105][105]; //標記是否已經訪問
int n,m; //分別代表行數和列數
int k,x1,y1,x2,y2;//最大轉彎次數,起點,終點
int t;//代表有多少組
int dir[4][2]=,,,}; //所有方向
int flag; //標記是否完成
struct node;
void bfs()
for(int i = 0;i<4;i++)
bri.x = next.x + dir[i][0];
bri.y = next.y + dir[i][1];
next = bri;
}} }
//return;
}int main(),,,,}; //所有方向
int count; //記錄轉彎次數
int maxcount; //最大能轉彎的次數
int x1,y1,x2,y2; //代表起點終點的座標
char maze[100][101]; //地圖
int flag; //標記是否已經完成
void dfs(int x,int y)
for(int i=1;i<5;i++)
}} int main()
scanf("%d%d%d%d%d",&maxcount,&x1,&y1,&x2,&y2);
//x1,x2對應列,y1,y2對應行
//因為它座標第一行是1,在電腦裡是0
x1-=1;y1-=1;x2-=1;y2-=1;
dfs(x1,y1);
if(flag)
printf("yes\n");
else
printf("no\n");
} return 0;
}
迷宮問題 dfs bfs
從迷宮入口點 1,1 出發,出口點 m,n 1.求所有路徑條數 2.求最短路徑條數 3.輸出一條最短路徑 題解 向四周搜尋,記下所有一步能到達的座標點 然後依次再從這些點出發,再記下所有一步能到達的座標點,依此類推,直到到達迷宮的出口點 m,n 為止,然後從出口點沿搜尋路徑回溯直至入口。這樣就找到了...
簡單迷宮(DFS BFS)
ps 不得不說自己太菜了,dfs和bfs的模板題都搞了好幾個小時 有乙個 10 x 10 的迷宮,起點是 s 終點是 e 牆是 道路是空格。乙個機械人從起點走到終點。當機械人走到乙個通道塊,前面已經沒有路可走時,它會轉向到當前面向的右手方向繼續走。如果機械人能夠過,則留下足跡 如果走不通,則留下標記...
dfs bfs迷宮集合
師兄在藍橋杯培訓的時候講過dfs,但是但是後來又忘了,然後又做,現在又忘 希望師兄不要打我 問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功...