題目描述
讓我們來玩乙個機械人遊戲,遊戲在乙個長方形網格上進行,機械人最初被安放在長方形網格的左上角且面朝東,而遊戲的目標就是使到達右下網格。
機械人可以執行以下5種操作:
「straight」: 保持機械人當前的方向,並前進一格。
「right」: 右轉90度,並前進一格
「back」: 轉180度,並前進一格
「left」: 左轉90度,並前進一格
「halt」: 停在原地,並結束遊戲。
機械人可以經過同乙個方塊多次。如果你在遊戲過程中,讓機械人走出邊界或者在到達目標之前執行了「halt」指令,你都將失敗。
現在你的任務是計算最小的代價,使機械人從起點到達終點。
輸入 檔案開始兩個整數w,h,表示列和行數(2 ≤ h ≤ 30 ,2 ≤ w ≤ 30)
接下來共h行w列整數
最後4個整數c0 c1 c2 c3。
格式如下:
w h
s(1,1) … s(1,w)
s(2,1) … s(2,w)
… s(h,1) … s(h,w)
c0 c1 c2 c3
矩陣中數字代表的含義如下:
0: 「straight」
1: 「right」
2: 「back」
3: 「left」
4: 「halt」
保證「halt」命令將出現在目標位置,但也可能出現在矩陣中某個方格中。
最後4個數字c0, c1, c2, 和c3, 分別表示你使用」straight」, 「right」, 「back」, and 「left」 命令的代價,其值在1~9之間。
輸出 輸出機械人從起點到終點的最小代價。
樣例輸入
8 3
0 0 0 0 0 0 0 1
2 3 0 1 4 0 0 1
3 3 0 0 0 0 0 4
9 9 1 9
樣例輸出
1 提示
30%資料w,h<10
100%資料w,h<=30
此題採用裂點方法,然後進行最短路即可。
裂點的裸題。
中間16個if語句可以通過迴圈減少**複雜度。
code
#include #include #include #include #include using namespace std;
int n,m,h,t,u,e,v,d1,d2,d3,d4,c0,c1,c2,c3,edgenum,ans;
int vet[100000],head[100000],len[100000],dis[100000],flag[100000],next[100000],q[100000];
int a[100][100];
int point(int x,int y,int z)
void add(int u,int v,int ok,int l)
void spfa()
spfa();
ans=min(min(min(dis[point(n,m,1)],dis[point(n,m,2)]),dis[point(n,m,3)]),dis[point(n,m,4)]);
printf("%d\n",ans);
return 0;
}
遊戲機械人
現在主要講講建邊的問題,許多圖難就難在建邊上,建完邊後就是簡單的裸題什麼之類的,遊戲機械人就是這樣一道題。時間限制 1 sec 記憶體限制 128 mb 提交 77 解決 43 提交 狀態 討論版 讓我們來玩乙個機械人遊戲,遊戲在乙個長方形網格上進行,機械人最初被安放在長方形網格的左上角且面朝東,而...
遊戲機械人(1)
最早聽說網路機械人的存在,是在2002年底,那時第一次聽說google為了統計和查詢網路資源,專門研製了一種網路機械人,在世界各地為google不辭勞苦地忙碌著,然而,關於網路機械人更詳細的資訊卻一直不得而知。直至2003年10月,才第一次在網路遊戲中聽說了有一種程式叫 機械人程式 以下簡稱遊戲機械...
機械人遊戲
小a和小b在乙個r行s列的棋盤上玩遊戲,棋盤上的每乙個棋格都有乙個方向標記 上 下 左或右 遊戲按如下方式進行 小a先將k個棋格塗上黑色 初始為白色 並且他不能塗黑最後一列的棋格 隨後,小b在第一列的任意乙個棋格上放乙個小機械人 此時,小機械人將會不停地沿著他所在的棋格所指示的方向走到乙個相鄰的棋格...