fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cassert>
  4. using namespace std;
  5.  
  6. int dx[9][10] = {
  7. {-1,-1,-1,0,1,1,1,0},
  8. {},
  9. {-1,-1,0,0,1,1,0},
  10. {-1,-1,0,0,1,1,0},
  11. {-1,1,0,1,-1},
  12. {-1,-1,0,1,1},
  13. {-1,0,1,-1,1},
  14. {0},
  15. {-1,1}
  16. };
  17. int dy[9][10] = {
  18. {1,0,-1,-1,-1,0,1,1},
  19. {},
  20. {1,0,-1,1,1,0},
  21. {1,0,-1,1,1,0},
  22. {-1,1,1,-1,1},
  23. {-1,0,1,-1,0},
  24. {-1,-1,-1,1,1},
  25. {1},
  26. {1,1}
  27. };
  28. string KOMA[9] = {"王", "飛", "金", "金", "銀", "特", "銅", "歩", "平"};
  29. struct Move{
  30. int type;
  31. int px,py,fx,fy;
  32. int get; // -1
  33. };
  34. enum{OU,HI,KI,KI2,GI,TO,DO,HU,HR};
  35. struct Board {
  36. bool turn[9];
  37. int x[9],y[9]; // x[i] = -1 then 持駒
  38. int get_pos(int x,int y){
  39. for(int i = 0; i<9;i++){
  40. if(this->x[i]==x&&this->y[i] == y){
  41. return i;
  42. }
  43. }
  44. return -1;
  45. }
  46. vector<Move> generate_moves(int cur_turn){
  47. vector<Move> result;
  48. for(int j = 0; j < 2; j++){
  49. int kk=j == 0 ? HI : HR;
  50. if(turn[kk] == cur_turn && x[kk] != -1) {
  51. // 飛
  52. int ddx[4]={1,-1,0,0},ddy[4]={0,0,1,-1};
  53. int max = kk==HI?4:2;
  54. for(int k = 0; k < max; k++) {
  55. int xx = x[kk],yy = y[kk];
  56. while(true) {
  57. xx += ddx[k];
  58. yy += ddy[k];
  59. if(0 <= xx && xx < 6 && 0 <= yy && yy < 6) {
  60. if(get_pos(xx,yy) == -1) {
  61. result.push_back((Move){kk, x[kk], y[kk], xx, yy, -1});
  62. }else if(turn[get_pos(xx,yy)] != cur_turn){
  63. result.push_back((Move){kk, x[kk], y[kk], xx, yy, get_pos(xx,yy)});
  64. break;
  65. }else{
  66. break;
  67. }
  68. }else break;
  69. }
  70.  
  71. }
  72. }
  73. }
  74. for(int K = 0; K < 9; K++) {
  75. if(turn[K] == cur_turn) {
  76. int rev = cur_turn ? -1 : 1;
  77. if(x[K] != -1) {
  78. for(int t = 0; dx[K][t] || dy[K][t]; t++ ){
  79. int ddx = -dx[K][t];
  80. int ddy = -dy[K][t];
  81. int nx = x[K]+rev*ddx,ny=y[K]+rev*ddy;
  82. if(nx >= 0 && nx < 6 && ny >= 0 && ny < 6){
  83. if(get_pos(nx,ny) == -1){
  84. result.push_back((Move){K, x[K], y[K], nx, ny, -1});
  85. }else if (turn[get_pos(nx,ny)] != cur_turn){
  86. result.push_back((Move){K, x[K], y[K], nx, ny, get_pos(nx,ny)});
  87. }
  88. }
  89. }
  90. }else{
  91.  
  92. for(int nx = 0; nx < 6; nx++) {
  93. for(int ny = 0; ny < 6; ny++) {
  94. if(get_pos(nx,ny) == -1) {
  95. result.push_back((Move){K, x[K], y[K], nx, ny, -1});
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. return result;
  103. }
  104. void show() {
  105. string s[6][6];
  106. string moti[2];
  107. for(int i = 0; i < 9; i++) {
  108. string type = "▽";
  109. if(turn[i] == 0) {
  110. type="△";
  111. }
  112. if(x[i] != -1) {
  113. s[x[i]][y[i]] = type + KOMA[i];
  114. }else{
  115. moti[turn[i]] += type + KOMA[i];
  116. }
  117. }
  118. cout << "持駒:" << moti[1] << endl;
  119. cout << "+";
  120. for(int t = 0; t < 6; t++ ) {
  121. cout <<"----+";
  122. }
  123. cout<<endl;
  124. for(int y = 0; y < 6; y++) {
  125. cout << "|";
  126. for(int x = 0; x < 6; x++) {
  127. if(s[x][y] == "")cout<<" ";
  128. else cout <<s[x][y];
  129. cout << "|";
  130. }
  131. cout<<endl;
  132. cout << "+";
  133. for(int t = 0; t < 6; t++ ) {
  134. cout <<"----+";
  135. }
  136. cout<<endl;
  137. }
  138. cout << "持駒:" << moti[0] << endl;
  139. }
  140. };
  141.  
  142.  
  143.  
  144. void move(Board &board, Move move, int turn) {
  145. assert(board.turn[move.type] == turn);
  146. assert(board.x[move.type] == move.px);
  147. assert(board.y[move.type] == move.py);
  148. board.x[move.type] = move.fx;
  149. board.y[move.type] = move.fy;
  150. if(move.get >= 0) {
  151. assert(board.turn[move.get] == !turn);
  152. assert(board.x[move.get] == move.fx);
  153. assert(board.y[move.get] == move.fy);
  154. board.turn[move.get] = turn;
  155. board.x[move.get] = -1;
  156. board.y[move.get] = -1;
  157. }
  158. }
  159.  
  160. void unmove(Board &board, Move move, int turn) {
  161. assert(board.turn[move.type] == turn);
  162. assert(board.x[move.type] == move.fx);
  163. assert(board.y[move.type] == move.fy);
  164. board.x[move.type] = move.px;
  165. board.y[move.type] = move.py;
  166. if(move.get >= 0) {
  167. assert(board.turn[move.get] == turn);
  168. assert(board.x[move.get] == -1);
  169. assert(board.y[move.get] == -1);
  170. board.turn[move.get] = !turn;
  171. board.x[move.get] = move.fx;
  172. board.y[move.get] = move.fy;
  173. }
  174. }
  175.  
  176. vector<Move> check_move(Board &board, const vector<Move> &moves, int turn) {
  177. vector<Move> result;
  178. for(Move mv: moves) {
  179. bool ok = false;
  180. if(turn == 0) {
  181. // 王手であるかどうかの判定
  182.  
  183. move(board, mv, turn);
  184. vector<Move> mvs = board.generate_moves(turn);
  185. for(int i = 0; i < mvs.size(); i++) {
  186. if(mvs[i].get == OU) {
  187. ok =true;
  188. break;
  189. }
  190. }
  191. unmove(board, mv, turn);
  192. }else {
  193. // 王を取れないかの判定
  194. ok = true;
  195. move(board, mv, turn);
  196. vector<Move> mvs = board.generate_moves(!turn);
  197. for(int i = 0; i < mvs.size(); i++) {
  198. if(mvs[i].get == OU) {
  199. ok =false; // 王が取られる
  200. break;
  201. }
  202. }
  203. unmove(board, mv, turn);
  204. }
  205. if(ok)result.push_back(mv);
  206. }
  207. return result;
  208. }
  209. #define AND (1)
  210. #define OR (0)
  211. const int INF = 9999999;
  212. struct SNode {
  213. int pf,dp;
  214. int terminateNode;
  215. int turn;
  216. int nodeType;
  217. Move lastMove;
  218. SNode* children;
  219. int childrenSize = 0;
  220. SNode(){}
  221. SNode(Board board, int turn, int nodeType){
  222. pf=dp=1;
  223. terminateNode = true;
  224. this->turn = turn;
  225. this->nodeType = nodeType;
  226. vector<Move> moves = check_move(board, board.generate_moves(turn), turn);
  227. if(moves.size() == 0) {
  228. if(nodeType == OR) {
  229. dp = 0;
  230. pf = INF;
  231. }else{
  232. dp = INF;
  233. pf = 0;
  234. }
  235. }
  236. }
  237. void update() {
  238. if(nodeType == OR) {
  239. pf = INF;
  240. dp = 0;
  241. for(int i = 0; i < childrenSize;i++){
  242. pf = min(pf, children[i].pf);
  243. dp = min(dp + children[i].dp , INF);
  244. }
  245. }else{
  246. dp = INF;
  247. pf = 0;
  248. for(int i = 0; i < childrenSize;i++){
  249. dp = min(dp, children[i].dp);
  250. pf = min(pf + children[i].pf , INF);
  251. }
  252. }
  253. }
  254. void expand(Board &board) {
  255. terminateNode = false;
  256. vector<Move> moves = check_move(board, board.generate_moves(turn), turn);
  257. children = new SNode[moves.size()]();
  258. childrenSize = moves.size();
  259. for(int i = 0; i < moves.size();i++){
  260. move(board, moves[i], turn);
  261. children[i] = SNode(board, 1 - turn, 1 - nodeType);
  262. children[i].lastMove = moves[i];
  263. unmove(board, moves[i], turn);
  264. }
  265. update();
  266. }
  267.  
  268. SNode *getMinProofChild() {
  269. int proof = INF;
  270. for(int i = 0; i < childrenSize;i++){
  271. proof = min(proof, children[i].pf);
  272. }
  273. for(int i = 0; i < childrenSize;i++){
  274. if(children[i].pf == proof)
  275. return children + i;
  276. }
  277. }
  278.  
  279. SNode *getMinDisProofChild() {
  280. int proof = INF;
  281. for(int i = 0; i < childrenSize;i++){
  282. proof = min(proof, children[i].dp);
  283. }
  284. for(int i = 0; i < childrenSize;i++){
  285. if(children[i].dp == proof)
  286. return children + i;
  287. }
  288. }
  289.  
  290. static void bestFirstSearch(SNode *node, Board &board) {
  291. if(node->terminateNode) {
  292. node->expand(board);
  293. }else{
  294. if(node->nodeType == OR) {
  295. SNode *best = node->getMinProofChild();
  296. move(board, best->lastMove, node->turn);
  297. bestFirstSearch(best, board);
  298. unmove(board, best->lastMove, node->turn);
  299. }else{
  300. SNode *best = node->getMinDisProofChild();
  301. move(board, best->lastMove, node->turn);
  302. bestFirstSearch(best, board);
  303. unmove(board, best->lastMove, node->turn);
  304. }
  305. node->update();
  306. }
  307. }
  308. static void dfs(Board &board, SNode &n, int turn, int depth) {
  309. cout << depth << endl;
  310. board.show();
  311. if(turn == 0) {
  312. for(int i = 0; i < n.childrenSize; i++) {
  313. if(n.children[i].pf == 0){
  314. SNode &child = n.children[i];
  315. move(board, child.lastMove, turn);
  316. dfs(board, child, !turn, 1 + depth);
  317. unmove(board, child.lastMove, turn);
  318. }
  319. }
  320. }else{
  321. for(int i = 0; i < n.childrenSize; i++) {
  322. if(n.children[i].pf == 0){
  323. SNode &child = n.children[i];
  324. move(board, child.lastMove, turn);
  325. dfs(board, child, !turn, 1 + depth);
  326. unmove(board, child.lastMove, turn);
  327. }
  328. }
  329. }
  330. }
  331. static void chessProblemSearch(Board &board, int turn) {
  332. SNode root = SNode(board, OR, turn);
  333. while(root.dp > 0 && root.pf > 0) {
  334. bestFirstSearch(&root, board);
  335. }
  336. cout << root.dp <<"," << root.pf << endl;
  337. dfs(board, root, 0, 0);
  338. }
  339.  
  340. };
  341. int search(int turn, int depth, Board &board) {
  342. vector<Move> moves = check_move(board, board.generate_moves(turn), turn);
  343. if(moves.size() == 0) {
  344. if(depth == 13)
  345. board.show();
  346. return -1;
  347. }
  348. if(depth == 13)return 1;
  349. cout << depth << "," << moves.size() << endl;
  350. board.show();
  351. int result = -1;
  352. for(Move mv: moves) {
  353. move(board, mv,turn);
  354. result = max(result, -search(!turn, depth + 1, board));
  355. unmove(board, mv, turn);
  356. if(result > 0)break;
  357. }
  358. cout << result << endl;
  359. return result;
  360. }
  361. int main() {
  362. Board board;
  363. board.x[0] = 4;
  364. board.y[0] = 2;
  365. board.turn[0] = 1;
  366.  
  367. board.x[1] = 5;
  368. board.y[1] = 2;
  369. board.turn[1] = 1;
  370.  
  371. board.x[2] = 2;
  372. board.y[2] = 1;
  373. board.turn[2] = 0;
  374.  
  375. board.x[3] = -1;
  376. board.y[3] = -1;
  377. board.turn[3] = 0;
  378.  
  379. board.x[4] = 4;
  380. board.y[4] = 1;
  381. board.turn[4] = 1;
  382.  
  383. board.x[5] = -1;
  384. board.y[5] = -1;
  385. board.turn[5] = 0;
  386.  
  387. board.x[6] = -1;
  388. board.y[6] = -1;
  389. board.turn[6] = 0;
  390.  
  391. board.x[7] = 3;
  392. board.y[7] = 4;
  393. board.turn[7] = 0;
  394.  
  395. board.x[8] = -1;
  396. board.y[8] = -1;
  397. board.turn[8] = 0;
  398.  
  399. board.show();
  400. SNode::chessProblemSearch(board, 0);
  401. }
Success #stdin #stdout 0.89s 3572KB
stdin
Standard input is empty
stdout
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |▽王|▽飛|
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△銅△平
9999999,0
0
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |▽王|▽飛|
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△銅△平
1
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |▽王|▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
2
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
3
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |▽銀|    |
+----+----+----+----+----+----+
|    |    |△金|▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
4
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |▽銀|    |
+----+----+----+----+----+----+
|    |    |△金|    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
5
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |▽銀|    |
+----+----+----+----+----+----+
|    |    |△金|    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△特△平
2
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
3
持駒:
+----+----+----+----+----+----+
|    |    |    |    |△特|    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△平
4
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |▽王|    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△平
5
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |▽王|    |
+----+----+----+----+----+----+
|    |    |△金|△平|▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
6
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |    |▽王|
+----+----+----+----+----+----+
|    |    |△金|△平|▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
7
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |△金|▽王|
+----+----+----+----+----+----+
|    |    |△金|△平|▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
8
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |△金|    |
+----+----+----+----+----+----+
|    |    |△金|△平|▽銀|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
9
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|△平|△金|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△銀
6
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|△平|▽銀|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
7
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |△平|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△銀
8
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽王|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△銀
9
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽王|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
10
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |△金|    |    |    |
+----+----+----+----+----+----+
|    |    |    |▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
11
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
12
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
13
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
10
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|▽王|    |
+----+----+----+----+----+----+
|    |    |△金|    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
11
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|▽王|    |
+----+----+----+----+----+----+
|    |    |△金|    |△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
10
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |▽王|
+----+----+----+----+----+----+
|    |    |△金|    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
11
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |▽王|
+----+----+----+----+----+----+
|    |    |△金|    |△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
10
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |△金|    |    |▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金
11
持駒:▽特▽平
+----+----+----+----+----+----+
|    |    |    |△銀|    |    |
+----+----+----+----+----+----+
|    |    |△金|    |△金|▽王|
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:
8
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |▽王|    |
+----+----+----+----+----+----+
|    |    |△金|    |△平|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△銀
9
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |▽王|    |
+----+----+----+----+----+----+
|    |    |    |△金|△平|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△銀
9
持駒:▽特
+----+----+----+----+----+----+
|    |    |    |    |▽王|    |
+----+----+----+----+----+----+
|    |    |△金|△金|△平|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△銀
2
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |▽王|
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
3
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |▽王|
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△特△平
2
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|    |    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△金△特△平
3
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |    |    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|▽王|    |
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△特△平
4
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |△金|    |▽銀|    |
+----+----+----+----+----+----+
|    |    |    |▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△特△平
5
持駒:
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
|    |    |    |    |▽銀|    |
+----+----+----+----+----+----+
|    |    |△金|▽王|    |▽飛|
+----+----+----+----+----+----+
|    |    |    |△銅|    |    |
+----+----+----+----+----+----+
|    |    |    |△歩|△金|    |
+----+----+----+----+----+----+
|    |    |    |    |    |    |
+----+----+----+----+----+----+
持駒:△特△平