問題描述
x星球的流行寵物是青蛙,一般有兩種顏色:白色和黑色。
如下圖,有一排杯子,左邊的乙個是空著的,右邊的杯子,每個裡邊有乙隻青蛙。
*wwwbbb
其中,w字母表示白色青蛙,b表示黑色青蛙,*表示空杯子。
x星的青蛙很有些癖好,它們只做3個動作之一:
1. 跳到相鄰的空杯子裡。
2. 隔著1只其它的青蛙(隨便什麼顏色)跳到空杯子裡。
3. 隔著2只其它的青蛙(隨便什麼顏色)跳到空杯子裡。
對於上圖的局面,只要1步,就可跳成下圖局面:
www*bbb
本題的任務就是已知初始局面,詢問至少需要幾步,才能跳成另乙個目標局面。
輸入為2行,2個串,表示初始局面和目標局面。
輸出要求為乙個整數,表示至少需要多少步的青蛙跳。
樣例輸入
*wwbb
wwbb*
樣例輸出 2
樣例輸入
www*bbb
bbb*www
樣例輸出 10
資料規模和約定
我們約定,輸入的串的長度不超過15
資源約定:
峰值記憶體消耗(含虛擬機器) < 256m
cpu消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。
所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:main,否則按無效**處理。
----------------------------
笨笨有話說:
我夢見自己是一棵大樹,
青蛙跳躍,
我就發出新的枝條,
春風拂動那第 5 層的新枝,
哦,我已是枝繁葉茂。
這個問題如果知道思路的話,並不是很難,但是想到這個思路就真的非常困難,所以把重點放在了如何根據這個題想到的使用bfs來做。
首先我們知道只有乙個'*'在這個字串中,那麼也就是兩邊的青蛙可以跳到這個空位置上來的只有六個,那麼在這個跳完了之後,在這種形態之下,我們緊接著往後進行,那麼我們就會利用到之前的狀態,如果利用了之前的狀態,我們就會發現,別的方法大多都是從這一條路一直走到天黑,如果這條路錯了的話,才會回頭,只有bfs會記錄下之前的每乙個狀態,從這乙個狀態下,新增新的狀態,所以還是bfs解決這個問題會好一些。
#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 20;
string str,ans;
int dir[6] = ;
struct node //結構體表示跳每一次的狀態
node()
};queueq; //bfs佇列
void bfs()}}
}void init()
void solve()
int main()
問題描述
如下面第乙個圖的九宮格中,放著 1~8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。
我們把第乙個圖的局面記為:12345678.
把第二個圖的局面記為:123.46758
顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。
本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。
輸入格式
輸入第一行包含九宮的初態,第二行包含九宮的終態。
輸出格式
輸出最少的步數,如果不存在方案,則輸出-1。
樣例輸入
12345678.
123.46758
樣例輸出
3樣例輸入
13524678.
46758123.
樣例輸出
22問題和上面的類似,只不過如果這裡使用map中字串相互匹配的話,很容易就會超時,所以將map中的字串匹配轉換為數字的匹配,這裡面1234.5678轉換為數字就是:123456784 最後一位表示小數點所在的位置,這樣就樂意解決了
#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
#define ll long long
using namespace std;
const int maxn = 15;
int dir[9][4] = ,,,,,,,,};
int cnt[9] = ;
string ans;
struct state
state(){}
};mapm;
queueque;
int get_num(string a)
num = num*10 + pos;
return num;
}int bfs()}}
return -1;
}int main()
first.step = 0;
m[get_num(first.str)] = 1;
que.push(first);
cout<
}
藍橋杯歷屆試題 青蛙跳杯子
歷屆試題 青蛙跳杯子 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x星球的流行寵物是青蛙,一般有兩種顏色 白色和黑色。如下圖,有一排杯子,左邊的乙個是空著的,右邊的杯子,每個裡邊有乙隻青蛙。wwwbbb 其中,w字母表示白色青蛙,b表示黑色青蛙,表示空杯子。x星的青蛙很有些癖好,它們只...
藍橋杯 歷屆試題 青蛙跳杯子 c
青蛙跳杯子 時間限制 1.0s 記憶體限制 256.0mb wwwbbb 其中,w字母表示白色青蛙,b表示黑色青蛙,表示空杯子。x星的青蛙很有些癖好,它們只做3個動作之一 1.跳到相鄰的空杯子裡。2.隔著1只其它的青蛙 隨便什麼顏色 跳到空杯子裡。3.隔著2只其它的青蛙 隨便什麼顏色 跳到空杯子裡。...
藍橋杯 歷屆試題 青蛙跳杯子(C )
www bbb 本題的任務就是已知初始局面,詢問至少需要幾步,才能跳成另乙個目標局面。輸入為2行,2個串,表示初始局面和目標局面。輸出要求為乙個整數,表示至少需要多少步的青蛙跳。樣例輸入 wwbb wwbb 樣例輸出 2樣例輸入 www bbb bbb www 樣例輸出 10廣搜,思路 借鑑 歷屆試...