結果
| 問題 | No.208 王将 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-28 21:30:53 |
| 言語 | D (dmd 2.112.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 890 bytes |
| 記録 | |
| コンパイル時間 | 5,183 ms |
| コンパイル使用メモリ | 197,808 KB |
| 実行使用メモリ | 122,164 KB |
| 最終ジャッジ日時 | 2026-02-28 21:31:01 |
| 合計ジャッジ時間 | 8,270 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 9 TLE * 1 -- * 13 |
ソースコード
module main;
// 2次元グリッド、8近傍、幅優先探索
import std;
alias P = Tuple!(int, "r", int, "c");
void main()
{
// 入力
P king;
readln.chomp.formattedRead("%d %d", king.r, king.c);
P pawn;
readln.chomp.formattedRead("%d %d", pawn.r, pawn.c);
// 答えの計算と出力
int[int][int] dist;
dist[0][0] = 0;
auto que = DList!P(P(0, 0));
while (!que.empty) {
P cur = que.front;
que.removeFront;
foreach (dr; [-1, 0, 1]) {
foreach (dc; [-1, 0, 1]) {
if (dr == 0 && dc == 0)
continue;
int nr = cur.r + dr, nc = cur.c + dc;
if (nr == pawn.r && nc == pawn.c)
continue;
if (nr !in dist || nc !in dist[nr]) {
dist[nr][nc] = dist[cur.r][cur.c] + 1;
// 目的地に到達した場合
if (nr == king.r && nc == king.c) {
writeln(dist[nr][nc]);
return;
}
que.insertBack(P(nr, nc));
}
}
}
}
}