山東大學程式設計第二週作業

2021-10-03 12:26:59 字數 2861 閱讀 1067

東東有一張地圖,想通過地圖找到妹紙。地圖顯示,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 需要識別這個題目給出的是 魔咒 還是對應功能,並寫出轉換的結果,如果在魔咒詞典裡找不到,輸出 ...