廣搜BFS 配題(HDU 1180)

2021-09-26 20:48:04 字數 1513 閱讀 9365

在當前的狀態下搜尋所有可能的狀態,1)佇列內的順序問題;2)搜尋時的各種判斷問題,邊界等等。

題目:hdu 1880 (中文題目)

思想:典型的廣搜問題,注意三點:

1)如果下乙個地點是梯子,要判斷梯子的方向和人的走向是否一致

2)因為題目要求到達t的最少時間,所以要用到優先佇列來代替傳統的佇列

3)如果下乙個點是梯子,但是不能走,那麼此時增加了一種搜尋方向,那就是原地不動,也要推入佇列

#include#include#includeusing namespace std;

const int max_n = 25;

const int col = 1;

const int row = 0;

int m, n;

char map[max_n][max_n];

int dir[4][2] = ; // down, right, up, left

struct node

};bool judge_boundary(node node)

else }

bool same_condition(node node, int condition, int direction)

else

if (node.tims % 2 == 0)

else

else

}return man_condition == ladder_condition;

}int min(const int x, const int y)

int bfs(node start, node end)

visited[next_node.u][next_node.v] = true;

q.push(next_node);

}else if (map[next_node.u][next_node.v] == '-' ||

map[next_node.u][next_node.v] == '|' )

else

if (same_condition(cur_node, condition, k))

visited[next_node.u][next_node.v] = true;

q.push(next_node);

}else

}} }

} int main()

if (n == 1 && m == 1)

memset(map, '\0', sizeof(map));

for (int i = 1; i <= n; i++)

struct node start_point, end_point;

int condition;

for (int i = 1; i <= n; i++)

else if (map[i][j] == 't')

}} cout<< bfs(start_point, end_point)<< endl;

} return 0;

}

HDU 1180 詭異的樓梯 廣搜

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...

HDU1180 詭異的樓梯 廣搜 優先佇列

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...

hdu1180詭異的樓梯 優先佇列 廣搜

好久沒寫部落格,主要還是因為週末的考試和昨天生態學實驗,憂傷的週末終於過去,更加的憂傷的日子已經來臨orz 寫在前面的廢話 這個題本來第一眼看是中文的,十分興奮,結果 到底還是ac率20 的題啊,理解錯乙個地方,有樓梯的地方不是只能順著走,只是順著走可以省時間1分鐘,能不能最後也省時間不一定 挺簡潔...