結果
| 問題 |
No.2928 Gridpath
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-03 23:28:37 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,236 bytes |
| コンパイル時間 | 984 ms |
| コンパイル使用メモリ | 79,696 KB |
| 最終ジャッジ日時 | 2025-02-24 03:50:15 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
const vector<int> dx4 = {0, 1, 0, -1};
const vector<int> dy4 = {1, 0, -1, 0};
int H, W;
int Si, Sj, Gi, Gj;
int count = 0;
bool valid(int i, int j) {
if(!(0 <= i && i < H)) return false;
if(!(0 <= j && j < W)) return false;
return true;
}
void solve(int i, int j, vector<vector<bool>>& M) {
if(i == Gi && j == Gj) {
count++;
return;
}
for(int k=0;k<4;k++) {
int ni = i + dx4[k], nj = j + dy4[k];
if(!valid(ni, nj)) continue;
if(M[ni][nj]) continue;
int neighbor = 0;
for(int k_=0;k_<4;k_++) {
int ni_ = ni + dx4[k_], nj_ = nj + dy4[k_];
if(!valid(ni_, nj_)) continue;
if(M[ni_][nj_]) neighbor++;
}
if(neighbor == 1) {
M[ni][nj] = true;
solve(ni, nj, M);
}
M[ni][nj] = false;
}
}
int main() {
pair<int, int> p1, p2;
cin >> H >> W;
cin >> Si >> Sj;
cin >> Gi >> Gj;
Si--;Sj--;Gi--;Gj--;
p1 = {Si, Sj};
p2 = {Gi, Gj};
count = 0;
vector<vector<bool>> M(H, vector<bool>(W, false));
M[Si][Sj] = true;
solve(Si, Sj, M);
cout << count << endl;
}