C语言扫雷点到空白地方一次打开一大片的算法求解
答案:2 悬赏:60
解决时间 2021-01-21 06:14
- 提问者网友:嘚啵嘚啵
- 2021-01-20 16:54
C语言扫雷点到空白地方一次打开一大片的算法求解
最佳答案
- 二级知识专家网友:动情书生
- 2021-01-20 17:14
能把代码再多给点吗?
那8个递归其实可以用两个for来做的
void ClickBlank(int x, int y) {
int i, j;
if (isBlank(x, y)) {
ShowAroundBlock(x, y);
for (i = -1; i <= 1; i++) {
for (j = -1; j <= 1; j++) {
if (i == 0 && j == 0) continue;
ClickBlank(x + i, y + j);
}
}
}
} 而且你应该设访问标记,已经ClickBlank的格子不应再调用ClickBlank
追问:
这里代码写的比较乱长的那一部分是打印周围八个格子数字下面是递归可是每次沿着一个方向递归完后不会进入下一个方向的递归不知道该怎么写整个游戏的代码?还是只要这个部分的代码?
追答:这个部分好了,如果还不行,我再问你拿全部
追问:
追答:嗯,我觉得就是因为你没有标记,所以进入无限递归了
追问:那我再去加上看一下
追答:嗯,还有其他问题可以继续问我,我私信给你了
追问:果然就是这个原因刚才去加上时候好了
谢谢大神哦,我关注你啦,以后有不会的继续问你哦
那8个递归其实可以用两个for来做的
void ClickBlank(int x, int y) {
int i, j;
if (isBlank(x, y)) {
ShowAroundBlock(x, y);
for (i = -1; i <= 1; i++) {
for (j = -1; j <= 1; j++) {
if (i == 0 && j == 0) continue;
ClickBlank(x + i, y + j);
}
}
}
} 而且你应该设访问标记,已经ClickBlank的格子不应再调用ClickBlank
追问:
这里代码写的比较乱长的那一部分是打印周围八个格子数字下面是递归可是每次沿着一个方向递归完后不会进入下一个方向的递归不知道该怎么写整个游戏的代码?还是只要这个部分的代码?
追答:这个部分好了,如果还不行,我再问你拿全部
追问:
追答:嗯,我觉得就是因为你没有标记,所以进入无限递归了
追问:那我再去加上看一下
追答:嗯,还有其他问题可以继续问我,我私信给你了
追问:果然就是这个原因刚才去加上时候好了
谢谢大神哦,我关注你啦,以后有不会的继续问你哦
全部回答
- 1楼网友:春色三分
- 2021-01-20 18:48
const int dx[8]={0,0,1,1,1,-1,-1,-1},
dy[8]={1,-1,1,0,-1,1,0,-1};
void ClickBlank(int x,int y){
int i;
showthis(x,y);//只显示这个格子
if(!IsBlank(x,y))return;
else for(i=0;i<8;i++)
if(ok(x+dx[i],y+dy[i]))//如果不越界
ClickBlank(x+dx[i],y+dy[i]);//递归
return ;}
dy[8]={1,-1,1,0,-1,1,0,-1};
void ClickBlank(int x,int y){
int i;
showthis(x,y);//只显示这个格子
if(!IsBlank(x,y))return;
else for(i=0;i<8;i++)
if(ok(x+dx[i],y+dy[i]))//如果不越界
ClickBlank(x+dx[i],y+dy[i]);//递归
return ;}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯