想法:
Bit運算,16位來表示棋盤的情況,16個0表示全白,16個1表示全黑。用BFS演算法,從一開始的情況開始出發,直到變成全白或全黑為止,或是無法變成全白或全黑。
2014年5月22日 星期四
2014年2月27日 星期四
UVa 11624 Fire
題意:
J在一個迷宮裡,迷宮有"不只一個"起火點F,J一分鐘移動一步,而火焰一分鐘也會向上下左右蔓延一步,J只要碰到迷宮的邊緣即可逃走,確認J是否能逃走,如果可以,輸出要走的最短步數。
想法:
將每個起火點用vector(或array)存下來,然後同時用兩個BFS,先讓所有起火點先動一步,再讓J動一步,確認J是否能碰到迷宮的邊緣。
用int Maze[1001][1001]來描述該迷宮的情況,我用-2代表起火點,-1代表牆壁('#'),0代表可以走的路,用BFS時,每次為了確認火焰都只動一步,因此勢必要記錄火焰走的步數,每次火焰走下一步時Maze[nxt_i][nxt_j] = Maze[cur_i][cur_j] - 1,用負數記錄火焰步數,而正數用來記錄Joe的步數。
UVa 10946 You want what filled
題意:
計算給定的區域不同種類的坑洞的面積,輸出時依照坑洞面積的大小排序,如果一樣則按照字母順序。
想法:
碰到不是'.'的字元就用BFS去算該坑洞的面積,最後再sort輸出即可。
計算給定的區域不同種類的坑洞的面積,輸出時依照坑洞面積的大小排序,如果一樣則按照字母順序。
想法:
碰到不是'.'的字元就用BFS去算該坑洞的面積,最後再sort輸出即可。
2014年2月24日 星期一
UVa 705 Slash Maze
想法:
把長和寬延伸3倍,使得迷宮地圖大9倍,並將'/'和'\'變成底下的形式:
001 100
010 010
100 001
延伸3倍的目的是為了讓我們在使用BFS的時候,能夠直接上下左右的走,不需要斜著走,所以只要依照'/'將地圖先做出來,再使用BFS走遍,並要判斷走遍的時候會不會走出界,如果會走出界代表它不是一個Cycle,而因為延伸3倍的關係,走的路徑長度最後要除以3。
把長和寬延伸3倍,使得迷宮地圖大9倍,並將'/'和'\'變成底下的形式:
001 100
010 010
100 001
延伸3倍的目的是為了讓我們在使用BFS的時候,能夠直接上下左右的走,不需要斜著走,所以只要依照'/'將地圖先做出來,再使用BFS走遍,並要判斷走遍的時候會不會走出界,如果會走出界代表它不是一個Cycle,而因為延伸3倍的關係,走的路徑長度最後要除以3。
2014年2月22日 星期六
UVa 10009 All Roads Lead Where?
想法:
將讀進來的字串用map轉成數字,並建立兩個點的連線。
用BFS演算法來搜索目的地,並在過程中用visit[]記錄每次的步數,最後抵達終點時BFS演算法結束,然後我們再利用visit從終點逆向走回起點,記下這條路徑走過的點,最後輸出結果。
將讀進來的字串用map轉成數字,並建立兩個點的連線。
用BFS演算法來搜索目的地,並在過程中用visit[]記錄每次的步數,最後抵達終點時BFS演算法結束,然後我們再利用visit從終點逆向走回起點,記下這條路徑走過的點,最後輸出結果。
UVa 10004 Bicoloring
題意:
只有兩種顏色,兩個相鄰的點必須顏色不同,給定一個graph,判斷該graph是否能符合上述條件。
想法:
用BFS走遍所有的點,走過的點將它編號為1或2,如果下一個點還沒走過,將它標上和現在這個點不一樣的編號,如果下一個已經走過,而編號和現在這個點一樣,回傳false,否則當BFS搜索完,回傳true。
只有兩種顏色,兩個相鄰的點必須顏色不同,給定一個graph,判斷該graph是否能符合上述條件。
想法:
用BFS走遍所有的點,走過的點將它編號為1或2,如果下一個點還沒走過,將它標上和現在這個點不一樣的編號,如果下一個已經走過,而編號和現在這個點一樣,回傳false,否則當BFS搜索完,回傳true。
2014年2月20日 星期四
UVa 567 Risk
題意:
1~19行,每行第一個數字表示後面會輸入幾個數字,而第i行表示第i個點能連到哪些點,第20行只有一個數字表示之後有幾個測試資料,每個測試資料有兩個數字:起點和終點,求出最短距離。
想法:
BFS題目,將每個點依序建立連結後,使用BFS並依題目要求輸出即可。
1~19行,每行第一個數字表示後面會輸入幾個數字,而第i行表示第i個點能連到哪些點,第20行只有一個數字表示之後有幾個測試資料,每個測試資料有兩個數字:起點和終點,求出最短距離。
想法:
BFS題目,將每個點依序建立連結後,使用BFS並依題目要求輸出即可。
2014年2月19日 星期三
2014年2月18日 星期二
UVa 383 Shipping Routes
想法:
用BFS來做,前M個先將輸入的字串用map對應成整數,然後接下來N行每行讀兩個字串,將彼此加入可到達的路徑裡,最後P行每行用BFS搜尋路徑。
注意輸出DATA SET" "1 有兩個空格
用BFS來做,前M個先將輸入的字串用map對應成整數,然後接下來N行每行讀兩個字串,將彼此加入可到達的路徑裡,最後P行每行用BFS搜尋路徑。
注意輸出DATA SET" "1 有兩個空格
2014年2月16日 星期日
訂閱:
文章 (Atom)