結果
| 問題 |
No.228 ゆきこちゃんの 15 パズル
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-08-07 22:12:26 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,031 bytes |
| コンパイル時間 | 1,845 ms |
| コンパイル使用メモリ | 177,628 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-17 14:20:04 |
| 合計ジャッジ時間 | 2,373 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:8:13: warning: 'sx' may be used uninitialized [-Wmaybe-uninitialized]
8 | int sy, sx;
| ^~
main.cpp:8:9: warning: 'sy' may be used uninitialized [-Wmaybe-uninitialized]
8 | int sy, sx;
| ^~
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
vector<vector<bool>> used(4, vector<bool>(4));
vector<vector<int>> A(4, vector<int>(4)), B(4, vector<int>(4));
int sy, sx;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
cin >> A[i][j];
B[i][j] = (4 * i + j + 1) & 15;
if(A[i][j] == 0)sy = i, sx = j;
}
}
function<bool(int,int)> dfs = [&](int y, int x){
if(A == B)return true;
used[y][x] = true;
for(int i = 0; i < 4; i++){
int dy = (i == 0) - (i == 1);
int dx = (i == 2) - (i == 3);
if(y + dy < 0 || y + dy >= 4 || x + dx < 0 || x + dx >= 4)continue;
if(used[y + dy][x + dx])continue;
swap(A[y][x], A[y + dy][x + dx]);
if(dfs(y + dy, x + dx))return true;
swap(A[y][x], A[y + dy][x + dx]);
}
used[y][x] = false;
return false;
};
cout << (dfs(sy, sx) ? "Yes" : "No") << endl;
}