東東有一張地圖,想通過地圖找到妹紙。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹紙,這兩個位置保證為0。既然已經知道了地圖,那麼東東找到妹紙就不難了,請你編乙個程式,寫出東東找到妹紙的最短路線。
輸入是乙個5 × 5的二維陣列,僅由0、1兩數字組成,表示法陣地圖。
輸出若干行,表示從左上角到右下角的最短路徑依次經過的座標,格式如樣例所示。資料保證有唯一解。
這個題思路大方向沒啥問題,搜尋題,就是測碼力,因為先講的bfs,就用bfs實現
提煉一下這個入門搜尋題**的要點:
串一下整體思路:
從起始點出發,加表示移動的陣列,每乙個加後的點判斷:是否越界,是否來過,沒有則加入佇列,迴圈上述過程,成功結束的條件為到達終點,失敗的條件為隊列為空
#include
#include
#include
using
namespace std;
int map[10]
[10];
int vis[10]
[10], d[10]
[10];
int dx=
;//上,下,左,右
int dy=
;struct node
node()
}mem[10]
[10];
intmain()
}}int xx =
0, yy =0;
cout<<
"(0, 0)"
(true
)}
倒水問題 「fill a」 表示倒滿a杯,"empty a"表示倒空a杯,「pour a b」 表示把a的水倒到b杯並且把b杯倒滿或a倒空。
輸入包含多組資料。每組資料輸入 a, b, c 資料範圍 0 < a <= b 、c <= b <=1000 、a和b互質。
你的程式的輸出將由一系列的指令組成。這些輸出行將導致任何乙個罐子正好包含c單位的水。每組資料的最後一行輸出應該是「success」。輸出行從第1列開始,不應該有空行或任何尾隨空格。
notes
如果你的輸出與sample output不同,那沒關係。對於某個"a b c"本題的答案是多解的,不能通過標準的文字對比來判定你程式的正確與否。 所以本題由 spj(special judge)程式來判定你寫的**是否正確。
這個題是乙個隱式圖問題,每一次倒水後杯子的狀態可以被視為乙個圖的節點,最後的目標也可以視為乙個節點,我們可以用bfs來搜尋有沒有從起點到終點的路。
考慮的情況與第一題類似,不過用於抽象的資料型別不同
串一下思路:
從開始狀態倒水,迴圈六種操作(去除非法操作),判斷操作後的狀態是否出現過,未出現過則加入佇列,迴圈上述操作,成功的條件為到達目標狀態,失敗的條件為佇列已空
#include
#include
#include
#include
using
namespace std;
int a, b, c;
string message[7]
=;struct cup
cup(
int a,
int b)
bool
operator
<
(const cup& s)
const
bool
operator!=(
const cup& s)
const
cup filla()
cup fillb()
cup emptya()
cup emptyb()
cup atob()
cup btoa()
};struct tcups
tcups
(cup a, cup b):x1
(a),
y1(b)};
queue q;
map mem;
//存後乙個狀態的
mapbool
> judge;
//是否經歷過該狀態
mapint> otpt;
//用來輸出對兩個杯子的操作
void
output
(cup s)
intmain()
cup temp = now.
atob()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
1; temp = now.
btoa()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
2; temp = now.
filla()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
3; temp = now.
fillb()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
4; temp = now.
emptya()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
5; temp = now.
emptyb()
;if(!judge[temp]
) otpt[
tcups
(temp, now)]=
6;}}
return0;
}
山東大學程式設計第八周作業
給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 使用差分約束系統的解法解決這道題 input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai b...
山東大學程式設計第十周作業
東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出 1。input 輸入的唯一一行包括兩個整數n和m 1 n m 5 10 8 output 輸出從n轉換到m的操作次...
山東大學程式設計思維作業15
zjm 為了準備霍格沃茲的期末考試,決心背魔咒詞典,一舉拿下咒語翻譯題 題庫格式 魔咒 對應功能 背完題庫後,zjm 開始刷題,現共有 n 道題,每道題給出乙個字串,可能是 魔咒 也可能是對應功能 zjm 需要識別這個題目給出的是 魔咒 還是對應功能,並寫出轉換的結果,如果在魔咒詞典裡找不到,輸出 ...