HDU 1175 連連看 我想我會來優化吧

2021-06-22 18:43:57 字數 1053 閱讀 8363

題目大意我就不講了。

該題目的基本思路跟hdu 1728 一樣。

bfs進行搜尋,並且往乙個方向搜到底。具體方法看**吧,嘴挫,不會講。= =!

wa了無數次,第乙個地方是沒有考慮不可走的方格,因為自己採用的整型陣列原因,所以就錯了。改了幾次改回來了。

第二個地方是在於優先佇列的使用問題,priority_queue需要過載<,注意你要得到從小到大,就return >,錯在這邊,檢查半天檢查不出來(頭昏腦脹,連資料都看錯了,以為對了= = )

#include#include #include using namespace std;

int sx, sy, ex, ey;

bool vis[1005][1005];

short map[1005][1005];

int n, m;

int div[4][2] = ;

int ss;//用來標記是否有符合的情況

struct pos

};bool check(int x, int y)

void bfs()

p.turns++;//因為該處方向已經被搜尋完了,所以肯定要轉彎。

for (int i = 0; i < 4; i++)

vis[mid.x][mid.y] = true;//標記

q.push(mid);

mid.x = mid.x + div[i][0];//往這個方向一直走,直到不符合條件。

mid.y = mid.y + div[i][1];

}} }

}int main()

bfs();

if (ss)

cout << "yes" << endl;

else

cout << "no" << endl;

} }}

搜尋 HDU1175 連連看

題目 分析 這道題看到的第一反應應該就是bfs或者dfs,裸的dfs bfs顯然會tle,所以我就想用a 不過好像並不好寫啟發函式。列舉步數不行,就列舉邊吧。因為允許有兩次轉折,所以最多有三條邊列舉中間的一條邊,然後進行check,這道題只用了兩個for迴圈就ac了。include include ...

hdu 1175 連連看 dfs搜尋

題目大意 因為是中文題,就不多說了。題目對兩塊棋子能否消除的限制為 兩者之間的連線不能轉向2次以上,並且不能穿過其他棋子.個人想法 dfs.如果能滿足題目的條件從一塊搜尋到另一塊,那麼就輸出yes,否則no。但這邊不知道為何,如果沒有在轉向兩次以後進行剪枝 接下去就只朝乙個方向走 的話,就是超時.結...

HDU 1175 連連看 DFS 剪枝

題目大意 連連看,中文題就不解釋了!解題思路 好坑的題呀,除錯了我n多個小時,怎麼都不對,後邊各種中間結果輸出都用上了,交上去一直wa。早上過來重新寫了一次,居然a了。完全不能理解呀!說下這個題吧,主要是對各個條件的剪枝上,其它都很簡單。在剪枝上的分析就不具體說了,給了很詳細的注釋了,各種細節注意就...