チーズ ()
問題
在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪。有一只老鼠准备从出发点吃遍每一个工厂的奶酪。老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次),且老鼠只能吃硬度不大于当前体力值的奶酪。 老鼠从当前格到上下左右相邻的无障碍物的格需要时间1单位,有障碍物的格不能走。走到工厂上时即可吃到该工厂的奶酪,吃奶酪时间不计。问吃遍所有奶酪最少用时
入出力例
输入&#xff1a;第一行三个整数H(1 <&#61; H <&#61; 1000)、W(1 <&#61; W <&#61;1000)、N(1 <&#61; N <&#61; 9)&#xff0c;之后H行W列为地图&#xff0c; “.“为空地&#xff0c; ”X“为障碍物&#xff0c;”S“为老鼠洞&#xff0c;N表示有N个生产奶酪的工厂&#xff0c;硬度为1-N。入力例 1
3 3 1
S..
...
..1
出力例 1
4
入力例 2
4 5 2
.X..1
....X
.XX.S
.2.X.
出力例 2
12
入力例 3
10 10 9
.X...X.S.X
6..5X..X1X
...XXXX..X
X..9X...X.
8.X2X..X3X
...XX.X4..
XX....7X..
X..X..XX..
X...X.XX..
..X.......
出力例 3
91
問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
#include
#include
#include
#include
#include
#include
using namespace std;
typedef pair P;
char maze[1005][1005];
int d[1005][1005];
int dirx[4] &#61; {0, -1, 0, 1};
int diry[4] &#61; {1, 0, -1, 0};
int h, w, n, hard;
int si, sj;
const int INF &#61; 0x3f3f3f3f;
int tot &#61; 0; void BFS(int ai, int aj){queue que;for(int i &#61; 0; i &#61;0 && dx&#61;0 && dy}int main(){while(scanf("%d%d%d", &h, &w, &n) !&#61; EOF){getchar();for(int i &#61; 0; i }