| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1052 人关注过本帖
标题:扫雷展开时的递归求助
只看楼主 加入收藏
奇数层
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2022-8-20
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
扫雷展开时的递归求助

展开的递归:
void open(char copy[ROWS][COLS], char show[ROWS][COLS], int rows, int cols, int x, int y)
{
    int ret = Open_condition(copy, x, y);
    if (ret == 0)
    {
        show[x][y] = ' ';
        if (x != 0 || x != rows - 1 || y != 0 || y != rows - 1)
        {
            int i = 0;
            int num = 0;
            for (i = x - 1; i <= x + 1; i++)
            {
                int j = 0;
                for (j = y - 1; j <= y + 1; j++)
                {
                    if(show[i][j]=='*')
                      open(copy, show, ROWS, COLS, x, y);
                }
            }
        }
    }

}

获取雷的个数:
int Open_condition(char copy[ROWS][COLS],int x, int y)
{
    int i = 0;
    int j = 0;
    int num = 0;
    for (i = x-1; i <= x + 1; i++)
    {
        for (j = y-1 ; j <= y + 1; j++)
        {
            if (copy[i][j] == '1')
            {
                num++;
            }

        }
    }
    return num;
}



int player_move(char copy[ROWS][COLS], char show[ROW][COLS], int rows, int cols)
{
    int x = 0;
    int y = 0;

    int ret = 0;
    while (1)
    {
        scanf("%d%d", &x, &y);
        if (2 <= x && x <= 10 && 2 <= y && y <= 10)
        {
            if (show[x - 1][y - 1] == '*')
            {
                if (copy[x - 1][y - 1] == '1')
                {
                    printf("死");
                    return 0;
                    break;
                }
                int ret = Open_condition(copy, x - 1, y - 1);
                if (ret != 0)
                {
                    show[x - 1][y - 1] = ret + '0';
                    return 1;
                    break;
                }
                if (ret == 0)
                {
                    open(copy, show, rows, cols, x - 1, y - 1);
                    return 1;
                    break;
                }
                    
            }
            else
            {
                printf("重复排查,请重新输入\n");
            }

        }
        else
        {
            printf("坐标违法,请重新输入\n");
        }
    }

}


现在踩到雷提示失败这一趴没问题。
排查雷周围的坐标显示有多少雷也没问题。
就是如果排查位置没雷,要展开出现问题-是递归出错了还是哪出错了?
搜索更多相关主题的帖子: int ret rows show copy 
2022-09-04 16:17
op123
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:170
专家分:461
注 册:2022-6-4
收藏
得分:20 
调试了吗?
2022-09-04 18:06
奇数层
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2022-8-20
收藏
得分:0 
回复 2楼 op123
调试了
2022-09-04 19:02
奇数层
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2022-8-20
收藏
得分:0 
回复 2楼 op123
要其他代码吗?其实我觉得是递归那里出问题了,但搞不清楚那里出问题了
2022-09-04 19:04
奇数层
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2022-8-20
收藏
得分:0 
回复 2楼 op123
搞定了搞定了
2022-09-04 19:30
快速回复:扫雷展开时的递归求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027511 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved