time limit:1000ms
memory limit:65536k
在一種"麻將"遊戲中,遊戲是在乙個有w*h格仔的矩形平板上進行的。每個格仔可以放置乙個麻將牌,也可以不放(如圖所示)。玩家的目標是將平板上的所有可通過一條路徑相連的兩張相同的麻將牌,從平板上移去。最後如果能將所有牌移出平板,則算過關。
這個遊戲中的乙個關鍵問題是:兩張牌之間是否可以被一條路徑所連線,該路徑滿足以下兩個特性:
1. 它由若干條線段組成,每條線段要麼是水平方向,要麼是垂直方向。
2. 這條路徑不能橫穿任何乙個麻將牌 (但允許路徑暫時離開平板)。
這是乙個例子:
在(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
*** 23
5313
4423
3400
00
4
30
用bfs。
向4個方向擴充套件。
每個方向,如果能走就一直走下去。
如果沒有訪問過,加入佇列。
如果到達終點,輸出答案。
#include
#include
#include
#include
#include
using
namespace std;
int n,m,x,y,zx,zy,fs[4]
[2]=
,,,}
;bool d[
1010][
1010
],a[
1010][
1010];
struct jgt
;void
input()
}return;}
void
bfs()}
if(dx==zx&&dy==zy)
//到達終點}}
printf
("0\n");
return;}
intmain()
return0;
}
SSL1786 麻將遊戲
在一種 麻將 遊戲中,遊戲是在乙個有w h格仔的矩形平板上進行的。每個格仔可以放置乙個麻將牌,也可以不放 如圖所示 玩家的目標是將平板上的所有可通過一條路徑相連的兩張相同的麻將牌,從平板上移去。最後如果能將所有牌移出平板,則算過關。這個遊戲中的乙個關鍵問題是 兩張牌之間是否可以被一條路徑所連線,該路...
SSL P1786 麻將遊戲
尋求最短路徑,但可越出平板 暫時性 相對其他的題目來說比較難,但只要處理好一些細節後,便會從複雜到簡單。我絕對不會說出ta是最小轉彎的 公升級版!include include include include define ll long long using namespace std inlin...
SSL P1786 麻將遊戲 題目
麻將遊戲 time limit 10000ms memory limit 65536k total submit 205 accepted 77 case time limit 1000ms description 在一種 麻將 遊戲中,遊戲是在乙個有w h格仔的矩形平板上進行的。每個格仔可以放置乙...