hdu1728
for
(int i =
0;i <
4;i++
) nx +
= dx[i]
; ny +
= dy[i];}
}
一開始寫的時候把上面的**寫錯了,沒有搜尋全部的狀態。
錯誤**
for
(int i =
0;i <
4;i++)}
}
ac碼
#include
#include
using namespace std;
struct node };
char maze[
105]
[105];
int record[
105]
[105];
int vis[
105]
[105];
int dx=
;int dy=
;int k, sx, sy, gx, gy, m, n;
void
bfs(
)break;}
for(
int i =
0; i <
4; i++
) nx +
= dx[i]
; ny +
= dy[i];}
}}if(flag ==-1
)cout <<
"no"
<< endl;
}int
main()
return0;
}
dfs做法應該是比bfs更容易想到的做法。其思路主要是,搜尋從起點到迷宮上任意可行點的路徑,並記錄從起點到每個可行點的最少轉彎次數。
首先把dfs的整體框架寫出來
void
dfs(
int x,
int y,
int d)
for(
int i =
0; i <
4; i ++)if
(flag ==1)
return
;// 已經找到符合條件的路徑
}}
整體的框架就完成了,接下來是分析如何記錄最小的轉彎次數
if
(turn[nx]
[ny]
< turn[x]
[y])
continue
;// 已經存在更小轉彎次數
if(i != d)
else
turn[nx]
[ny]
= turn[x]
[y];
ac碼
#include
using namespace std;
int k, sx, sy, gx, gy, flag, m, n;
char maze[
105]
[105];
int turn[
105]
[105];
int dx=
;int dy=
;void
dfs(
int x,
int y,
int d)
if(turn[x]
[y]> k)
return
;// 剪枝
for(
int i =
0; i <
4; i++
)else
turn[nx]
[ny]
= turn[x]
[y];
dfs(nx, ny, i);if
(flag ==1)
return;}
}return;}
intmain()
return0;
}
dfs bfs 逃離迷宮
給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...
A 逃離迷宮 DFS
給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...
逃離迷宮6
小hi被壞女巫抓進裡一間有n x n個格仔組成的矩陣迷宮。有些格仔是小hi可以經過的,我們用 表示 有些格仔上有障礙物小hi不能經過,我們用 表示。小hi的起始位置在左上角,他需要到達右下角的格仔才能逃離迷宮。小hi每一步可以移動到上下左右四個方向相鄰的格仔上,前提是目標格式必須是沒有障礙的。現在小...