時間限制: 1 sec 記憶體限制: 128 mb
題目描述
在一種"麻將"遊戲中,遊戲是在乙個有w*h格仔的矩形平板上進行的。每個格仔可以放置乙個麻將牌,也可以不放(如圖所示)。玩家的目標是將平板上的所有可通過一條路徑相連的兩張相同的麻將牌,從平板上移去。最後如果能將所有牌移出平板,則算過關。
這個遊戲中的乙個關鍵問題是:兩張牌之間是否可以被一條路徑所連線,該路徑滿足以下兩個特性:
它由若干條線段組成,每條線段要麼是水平方向,要麼是垂直方向。
這條路徑不能橫穿任何乙個麻將牌 (但允許路徑暫時離開平板)。
這是乙個例子:
在(1,3)的牌和在(4, 4)的牌可以被連線。(2, 3)和(3, 4)不能被連線。
你的任務是編乙個程式,檢測兩張牌是否能被一條符合以上規定的路徑所連線。
輸入輸入檔案的第一行有兩個整數w,h (1<=w,h<=75),表示平板的寬和高。接下來h行描述平板資訊,每行包含w個字元,如果某格仔有一張牌,則這個格仔上有個』x』,否則是乙個空格。平板上最左上角格仔的座標為(1,1),最右下角格仔的座標為(w,h)。接下來的若干行,每行有四個數x1, y1, x2, y2 ,且滿足1<=x1,x2<=w,1<=y1,y2<=h,表示兩張牌的座標(這兩張牌的座標總是不同的)。如果出現連續四個0,則表示輸入結束。
輸出輸出檔案中,對於每一對牌輸出佔一行,為連線這一對牌的路徑最少包含的線段數。如果不存在路徑則輸出0。
樣例輸入
5 4***xx
x ***x x
***2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
樣例輸出43
0每次我們都把當前要搜尋的值放入乙個佇列,然後從前往後搜尋,找到結果就退出
#include
#include
#include
#include
using
namespace std;
struct node };
int w,h,bx,by,ex,ey;
char ma[88]
[88];
bool v[88]
[88];
const
int dx[4]
=,dy[4]
=;inline
intbfs()
nx+=dx[i]
,ny+
=dy[i];}
}}return0;
}int
main()
}while
(true
)return0;
}
搜尋 廣度優先搜尋
廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...
廣度優先搜尋
include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...
廣度優先搜尋
廣度優先搜尋詳解 1.也稱寬度優先搜尋,顧名思義,就是將一棵樹一層一層往下搜。演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k l的其他頂點。bfs是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...