code[vs]1004四子连棋(迭代深度优先搜索)
2017-10-09 18:40
218 查看
/* 作者:桦清_L 题目:p1004 四子连棋 */ #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <algorithm> #include <stack> #include <math.h> using namespace std; #define inf 1000000000 int ans; char map[5][5]; bool can(int x, int y, char c) //判断是否越界和避免与另一个空格交换 { return (x >= 1 && x <= 4 && y >= 1 && y <= 4 && map[x][y] != c); } bool check() //判断 横竖 斜反斜是否连 { for (int i = 1; i <= 4; i++) { if (map[i][1] == map[i][2] && map[i][1] == map[i][3] && map[i][1] == map[i][4]) return 1; //行 if (map[1][i] == map[2][i] && map[1][i] == map[3][i] && map[1][i] == map[4][i]) return 1; //列 } if (map[1][1] == map[2][2] && map[1][1] == map[3][3] && map[1][1] == map[4][4]) return 1; //正斜 if (map[1][4] == map[2][3] && map[1][4] == map[3][2] && map[1][4] == map[4][1]) return 1; //反斜 return 0; } int dfs(int x1, int y1, int x2, int y2, char c, int step) { int move[4][2] = { { -1,0 },{ 1,0 },{ 0,-1 },{ 0,1 } }; if (step == ans) //弹出条件 { if (check()) return 1; else return 0; } for (int i = 0; i < 4; i++) //四个方向 { int nx1 = x1 + move[i][0]; int ny1 = y1 + move[i][1]; int nx2 = x2 + move[i][0]; int ny2 = y2 + move[i][1]; if (can(nx1, ny1, c)) { swap(map[x1][y1], map[nx1][ny1]); if (dfs(nx1, ny1, x2, y2, c == 'B' ? 'W' : 'B', step + 1)) return 1; swap(map[x1][y1], map[nx1][ny1]); } if (can(nx2, ny2, c)) { swap(map[x2][y2], map[nx2][ny2]); if (dfs(x1, y1, nx2, ny2, c == 'B' ? 'W' : 'B', step + 1)) return 1; swap(map[x2][y2], map[nx2][ny2]); } } return 0; }
相关文章推荐
- 【日常学习】【迭代加深搜索】codevs1049 棋盘染色题解
- code[vs] 1004 四子连棋(迭代加深搜索)
- codevs 1288 埃及分数 迭代加深搜索
- [CODEVS1288]埃及分数(迭代加深搜索)
- 深度优先搜索 之 CODE[VS] 1116 四色问题
- [codevs1288]埃及分数 迭代加深搜索
- [codevs1288]埃及分数(迭代加深搜索)
- 迭代加深搜索[codevs1004 四子连棋]
- codevs 2541 幂运算(迭代加深搜索)
- codevs1288埃及分数-迭代加深搜索
- 【日常学习】【迭代加深搜索+哈希】codevs1004 四子连棋题解
- codevs 2541 幂运算(迭代加深搜索)
- [迭代加深搜索] Codevs1288 埃及分数问题
- CodeVS 1288 迭代加深 解题报告
- 深度优先搜索 codevs 1064 虫食算
- 【CodeVS1004】四子连棋-迭代加深搜索入门
- Codevs 1038 一元三次方程求解 NOIP 2001(导数 牛顿迭代)
- 找规律+模拟 之 codevs 1160 蛇形矩阵
- vs code 安装Scala
- Codevs 1085 数字游戏