写连连看的时候的 用于判断消除的代码
枚举判断
int data[13][8]; class Point2D { public: int x; int y; Point2D(int xx, int yy):x(xx),y(yy){} Point2D() :x(0), y(0){} } class searchAlg { public: int search_0(Point2D pre, Point2D las, queue<Point2D> &tmp) { /* 二维坐标0代表 空 搜索0拐点 return 0 代表未找到 return N N代表路径数(两点差值) 相邻返回1 隔一个返回2 以此类推 */ int x_pre = pre.x; int y_pre = pre.y; int x_las = las.x; int y_las = las.y; //x变量 if (y_pre == y_las) { int min = x_pre > x_las ? x_las : x_pre; int max = x_pre < x_las ? x_las : x_pre; tmp.push(Point2D(x_pre, y_pre)); if (x_pre>x_las) { for (int x = max - 1; x > min; x--) { if (data[x][y_pre] == 0) { tmp.push(Point2D(x, y_pre)); } else { return 0; } } } if (x_pre <= x_las) //等价 //else { for (int x = min + 1; x < max; x++) { if (data[x][y_pre] == 0) { tmp.push(Point2D(x, y_pre)); } else { return 0; } } } return (max - min); //代表队列多少个数据 } ///y变量 if (x_pre == x_las) { int min = y_pre > y_las ? y_las : y_pre; int max = y_pre < y_las ? y_las : y_pre; tmp.push(Point2D(x_pre, y_pre)); if (y_pre>y_las) { for (int y = max - 1; y > min; y--) { if (data[x_pre][y] == 0) { tmp.push(Point2D(x_pre, y)); } else { return 0; } } } if (y_pre <= y_las) { for (int y = min + 1; y < max; y++) { if (data[x_pre][y] == 0) { tmp.push(Point2D(x_pre, y)); } else { return 0; } } } return (max - min); //代表队列多少个数据 } return 0; } int search_1(Point2D pre, Point2D las, queue<Point2D> &tmp) //1个拐点 { if (data[las.x][pre.y] == 0)//右下 { if (search_0(pre, Point2D(las.x, pre.y), tmp) != 0) { if (search_0(Point2D(las.x, pre.y), las, tmp) != 0) { return tmp.size(); } } } for (; !tmp.empty();)//清空 { tmp.pop(); } if (data[pre.x][las.y] == 0)//左上 { if (search_0(pre, Point2D(pre.x, las.y), tmp) != 0) { if (search_0(Point2D(pre.x, las.y), las, tmp) != 0) { return tmp.size(); } } } return 0; } int search_2(Point2D pre, Point2D las, queue<Point2D> &tmp) {//2拐点 //凹型y+ for (int i = 0; i < y; i++) { for (; !tmp.empty();)//清空 { tmp.pop(); } if (data[las.x][las.y + i] == 0)//凹型 { if (search_1(pre, Point2D(las.x, las.y + i), tmp) != 0) { if (search_0(Point2D(las.x, las.y + i), las, tmp) != 0) { return tmp.size(); } } } } for (; tmp.empty() == false;) { tmp.pop(); } //凹型y- for (int i = 0; i < y; i++) { for (; !tmp.empty();)//清空 { tmp.pop(); } if (data[las.x][las.y - i] == 0)//凹型 { if (search_1(pre, Point2D(las.x, las.y - i), tmp) != 0) { if (search_0(Point2D(las.x, las.y - i), las, tmp) != 0) { return tmp.size(); } } } } for (; tmp.empty() == false;) { tmp.pop(); } //凹型x+ for (int i = 0; i < x; i++) { for (; !tmp.empty();)//清空 { tmp.pop(); } if (data[las.x + i][las.y] == 0)//凹型 { if (search_1(pre, Point2D(las.x + i, las.y), tmp) != 0) { if (search_0(Point2D(las.x + i, las.y), las, tmp) != 0) { return tmp.size(); } } } } for (; tmp.empty() == false;) { tmp.pop(); } //凹型x- for (int i = 0; i < x; i++) { for (; !tmp.empty();)//清空 { tmp.pop(); } if (data[las.x - i][las.y] == 0)//凹型 { if (search_1(pre, Point2D(las.x - i, las.y), tmp) != 0) { if (search_0(Point2D(las.x - i, las.y), las, tmp) != 0) { return tmp.size(); } } } } return 0; } int x; int y; searchAlg(int l, int w) :y(l), x(w) { } }
时间: 2024-10-17 11:41:14