在當前的狀態下搜尋所有可能的狀態,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分鐘,能不能最後也省時間不一定 挺簡潔...