2017 4 2測試T4 game 搜尋

2021-07-29 22:48:04 字數 2407 閱讀 6136

第四題(50分)(每個測試資料2分)

提交檔案:game.exe

輸入檔案:game.in

輸出檔案:game.out

題目描述

下面介紹乙個小遊戲:

在乙個m×n的板上,有部分格仔被標記為障礙(例如上圖黑色標示的格仔)。你任選乙個空白格仔放置乙個小球(如上圖灰點所示),並選擇小球滾動的方向(上,下,左,右),小球將在板上一直滾動直至它碰到障礙,或板的邊界,或它之前經過的格仔。如果小球遇到以上情況之一將停下,你可以給它另選滾動的方向,然後小球將以同樣的方式前進。如果小球在四個方向上都無法繼續滾動,遊戲結束,這時假如小球的軌跡覆蓋板上所有的空白格仔,你將獲勝。上圖展示的軌跡就是乙個僅用10步獲勝的例子。

你的任務是對給定板子,計算贏得遊戲所需的最少步數。

輸入格式(map.in):

輸入的第一行是用空格分隔的兩個正整數m和n(m,n<=30),分別板子的高和寬。接下來的m行,每行有n個字元,含義如下:

『.』:該格是空白格仔;

『*』:該格被標記為障礙。

我們保證板子不會全部被標記為障礙。

輸出格式(map.out):

輸出僅乙個整數,表示計算贏得遊戲所需的最少步數。假如無法取勝,則輸出-1。

樣例

game.in

game.out

5 5

題解:從每個可走的點搜尋。剪枝:如果當前走的步數大於之前找到的答案最小值可以直接結束這個點

const

maxn=40;

fx:array[1..4,1..2]of longint=((-1,0),(1,0),(0,-1),(0,1));

inf='game.in';

ouf='game.out';

var a:array[0..maxn+1,0..maxn+1]of boolean;

n,m,i,j,ans,sum:longint;

procedure init;

var i,j:longint;

ch:char;

begin

readln(m,n);

fillchar(a,sizeof(a),true);

for i:=1 to m do

begin

for j:=1 to n do

begin

read(ch);

if ch='*' then

begin

inc(sum);

a[i,j]:=false;

end;

end;

readln;

end;

fillchar(a[0],sizeof(a[0]),false);

fillchar(a[m+1],sizeof(a[m+1]),false);

for i:=1 to m do

begin

a[i,0]:=false;

a[i,n+1]:=false;

end;

ans:=maxlongint;

end;

procedure dfs(dep,x,y,tot:longint);

var i,px,py:longint;

begin

if dep>=ans then exit;

if tot=n*m-sum then

begin

if depx)or(py<>y)then

begin

dfs(dep+1,px,py,tot+abs(px-x)+abs(py-y));

while (x<>px)or(y<>py) do

begin

a[px,py]:=true;

px:=px-fx[i,1];py:=py-fx[i,2];

end;

end;

end;

end;

begin

assign(input,inf);reset(input);

assign(output,ouf);rewrite(output);

init;

for i:=1 to m do

for j:=1 to n do

if a[i,j] then

begin

a[i,j]:=false;

dfs(0,i,j,1);

a[i,j]:=true;

end;

if ans=maxlongint then ans:=-1;

writeln(ans);

close(input);close(output);

end.

測試4T3 圍欄問題

時間限制 2 sec 記憶體限制 128 mb 在一片草原上,有n只兔子無憂無慮地生活著。這片草原可以劃分成m m的方陣。每個方格內最多有乙隻兔子。一位飼養員負責餵養這些兔子。為了方便,她需要用籬笆建造最多k座圍欄,將草原上的兔子全部圍起來。圍欄需要滿足以下條件 1 必須沿著網格線建造 2 每座圍欄...

第5次模擬測試T4題解

hl啊 你的23日遊終於結束了 由於本人實在太懶,才寫了一篇題解 t4.數字遊戲 問題描述 hl中學茶餘飯後喜歡玩遊戲,乙個遊戲規則如下 共兩人參加遊戲,若第乙個人當前手中的數為w1,則下一秒他手上的數將 會變成 x1 w1 y1 mod m 若第二個人當前手中的數為w2,則下一秒他 手上的數將會變...

C 登山(等級考試4級 測試T) 解題思路

五一到了,icpc隊組織大家去登山觀光,隊員們發現山上一共有n個景點,現在告訴你這n個景點的海拔。隊員們決定按照順序來瀏覽這些景點,即每次所瀏覽景點的下標都要大於前乙個瀏覽景點的下標。同時隊員們還有另乙個登山習慣,就是不連續瀏覽海拔相同的兩個景點,並且一旦開始下山,就不再向上走了。隊員們希望在滿足上...