YYOJ 攻城掠地

2021-10-04 05:54:16 字數 1641 閱讀 5684

題目描述

今天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...