加入限制条件 只在未被打开的区域 进行递归 避免了来回死递归
void saolei(int leipan[X11][Y11], char youxipan[X11][Y11],int x,int y,int x1, int y1)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1)&&(youxipan[x][y]=='*')) //递归不动 栈溢出
{
youxipan[x][y] = ' ';
saolei(leipan, youxipan, x-1, y-1, x1, y1);
saolei(leipan, youxipan, x-1, y, x1, y1);
saolei(leipan, youxipan, x-1, y+1, x1, y1);
saolei(leipan, youxipan, x, y-1, x1, y1);
saolei(leipan, youxipan, x, y+1, x1, y1);
saolei(leipan, youxipan, x+1, y-1, x1, y1);
saolei(leipan, youxipan, x+1, y, x1, y1);
saolei(leipan, youxipan, x+1, y+1, x1, y1);
}
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
演示效果
效果完全复现 扫雷小游戏