這題乙個下午了,現在終於過了;
用了兩次廣搜,一次搜箱子到目標地,第二次搜人是可以到推動箱子的地方,要注意的是箱子可能會阻擋人,也可以來回的推。
給幾組資料就知道了(這題資料都是後面討論版中提供的)
4 30 0 0
0 0 1
0 2 3
1 4 1
5 50 3 0 0 0
1 0 1 4 0
0 0 1 0 0
1 0 2 0 0
0 0 0 0 0
4 41 2 1 1
0 0 0 0
0 4 3 0
0 0 0 0
4 40 3 0 0
0 0 2 0
0 0 4 0
0 1 0 1
3 30 3 0
1 0 2
0 4 0
5 50 1 4 0 0
0 1 1 1 1
0 2 3 0 0
0 0 0 0 0
0 0 0 0 0
4 40 1 0 1
0 2 0 4
0 0 0 0
0 3 0 1
#include#include#define n 8
using namespace std;
int n, m, str[n][n], mark[n][n], pmark[n][n], dir[4][2]=;
int s_x, s_y, e_x, e_y, p_x, p_y;
struct node
;int judge(int x, int y)
} }return -1;
}int bfs()
} }return 0;
}int main()
} memset(mark, 0, sizeof(mark));
int ans=bfs();
if(ans==0)
printf("-1\n");
else
printf("%d\n", ans);
} return 0;
}
hdu 1254 推箱子 廣搜 深搜
注意以下幾點 1.箱子是否可走 2.人是否可達箱子後面 3.箱子的每個方向只走一次,而不是每個位置 廣搜箱子路徑,深搜人可否達箱子後面,記錄方向用visb 10 10 4 來記錄 include include include include include includeusing namespa...
hdu 1254 推箱子遊戲
這個題目我就不說,鏈結在這裡 主要我想說的是,一開始是我用2個三圍陣列來分別標記人和箱子走過的四個方向,但不知怎麼回事行不通。於是就用乙個四維陣列來標記狀態,嘻嘻,過了。好吧,還是直接上 了。1 include2 include3 include4 5using namespace std 6int...
HDU 1254 推箱子(搜尋)
by cxlove 以前就做過的一題,重溫一下 推箱子遊戲,首先廣搜箱子的路徑,每一次移動都要判斷人是否能到達指定位置 bfs,dfs都行 我採用兩次bfs解決問題 在箱子的移動中,判重的時候需要乙個三維陣列,箱子從不同方向過來,人的位置是不一樣的,也就意味著狀態不一樣 id cxlove incl...