麻將遊戲(BFS)

2021-10-01 11:05:51 字數 1687 閱讀 7750

時間限制:1000ms記憶體限制:256000kb

題目描述

在一種"麻將"遊戲中,遊戲是在乙個有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

***2 3 5 3

1 3 4 4

2 3 3 4

0 0 0 0

輸出樣例43

0分析

這題我們可以用廣搜bfs來做

這題我們可以根據前面的**最小轉彎問題(bfs)**來做

最小轉彎問題(bfs)

再加上一些特殊的輸入和邊界就行了

ac**

#include

using

namespace std;

int m,n,s,o,x1,y1,x2,y2,head,tail,a[80]

[80],st[

1000005][

4],b[80][

80];int dx[5]

=;//四個反向

int dy[5]

=;string str;

void

bfs()}

x+=dx[i]

;//一定要在if外,while裡面原因同上

y+=dy[i];}

}}while

(head

intmain()

s=1;

while

(cin>>x1&&cin>>y1&&cin>>x2&&cin>>y2)

}

SSL P1786 麻將遊戲

尋求最短路徑,但可越出平板 暫時性 相對其他的題目來說比較難,但只要處理好一些細節後,便會從複雜到簡單。我絕對不會說出ta是最小轉彎的 公升級版!include include include include define ll long long using namespace std inlin...

麻將遊戲 廣度優先搜尋

時間限制 1 sec 記憶體限制 128 mb 題目描述 在一種 麻將 遊戲中,遊戲是在乙個有w h格仔的矩形平板上進行的。每個格仔可以放置乙個麻將牌,也可以不放 如圖所示 玩家的目標是將平板上的所有可通過一條路徑相連的兩張相同的麻將牌,從平板上移去。最後如果能將所有牌移出平板,則算過關。這個遊戲中...

SSL1786 麻將遊戲

在一種 麻將 遊戲中,遊戲是在乙個有w h格仔的矩形平板上進行的。每個格仔可以放置乙個麻將牌,也可以不放 如圖所示 玩家的目標是將平板上的所有可通過一條路徑相連的兩張相同的麻將牌,從平板上移去。最後如果能將所有牌移出平板,則算過關。這個遊戲中的乙個關鍵問題是 兩張牌之間是否可以被一條路徑所連線,該路...