題目描述
今天lzy攻城小分隊出動了,他們需要在盡可能短的時間內攻占敵人的大本營。戰場是乙個n * m的二維網格,lzy小分隊初始在(0,0)點,敵軍大本營在( n -1 ,m - 1)點
每個點上有乙個對應的數字代表lzy小分隊攻占這個據點需要耗費的時間,現在作為lzy小分隊的指揮官,你需要指定一條合適的路線,使lzy小分隊能用最短的時間攻占敵人大本營。
輸入
測試樣例由多組測試資料組成。每組測試資料第一行輸入兩個正整數n , m ( 1 <= n,m <= 100)
接下來輸入n * m 個數字 ,每個數字不超過 500
輸出
輸出lzy小分隊攻占敵人大本營所需要的最短時間
樣例輸入 copy
331
2312
3123
樣例輸出 copy
8
思路
優先搜尋+bfs首先將起點座標與當前座標耗時壓入佇列,進行搜尋,搜尋到符合條件的座標也壓入佇列,因為佇列已經設定時間優先順序,所以耗時少的一定在前面,所以第乙個到達終點的耗時最少。
//優先佇列三個引數 資料型別、排序容器、排序規則
priority_queue
,cmp> q;
//優先佇列的自定義排序規則和sort自定義相反
struct cmp
}
ac**
#include
#include
#include
#include
using
namespace std;
int map[
105]
[105];
int vis[
105]
[105];
int dir[4]
[2]=
,,,}
;int n,m;
struct nodes;
struct cmp};
bool
check
(int x,
int y)
return
true;}
priority_queue
,cmp> q;
intbfs()
for(
int i=
0;i<
4;i++)}
}}intmain()
}memset
(vis,0,
sizeof
(vis));
while
(q.size()
) s.x=0;
s.y=0;
s.value=map[0]
[0];
q.push
(s);
printf
("%d\n"
,bfs()
);}return0;
}
最長遞增路徑(YYOJ)
description 給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外。input 測試樣例由多組測試資料組成。每組測試資料第一行輸入兩個正整數n,m代表矩形的行數和列數 1 n,m 500 接下來輸入n m 個數...
YYOJ 方陣中的C位
題目描述 現在給你乙個n m的二維方陣,裡面有可能有乙個數所在的位置是c位。c位的條件 在同一行的所有元素中最小 在同一列的所有元素中最大 現在請你幫忙找一下這個數字,如果這個數字不存在,則輸出 no number 輸入 測試樣例由多組測試資料組成。每組測試資料第一行輸入兩個正整數n m 1 n,m...
YYOJ 親戚關係 並查集
題目描述 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入 第一行 三個整數n,m,p,n 5000...