以下是该程序的题目要求,如下:编程题:Android手机9宫格有多少种可能的手势?如果是16宫格呢? 规则:4个点或以上的手势才算;一个手势中,每个点最多只能被算作经过一次;只有已经经过的点才能直接越过,也就是说,如果你想连接的两个点中间还有其他点,那这些点必须是已经被之前经过的。

解题思路:1、本题从数学角度也可以解出来,但是比较复杂。若程序实现,可以从遍历树结构或者动态规划的角度实现,但是在保存现场中可以用到栈或者队列。2、本人从三个模块入手,第一个模块是初始化模块,用于初始化初始的连接矩阵,构造一个可连接矩阵,1表示可连接,0表示不可连接。第二个模块用于计算新的连接矩阵,根据之前遍历过得节点修改连接矩阵。第三个模块用于递归遍历树。

程序代码如下:

代码块

include “stdio.h”

define FALSE 0

define TRUE 1

//commonset

int mode;//0 equal to 9GongGe,1 equal to 16Gongge

int level = 0;

int layer = 4;

long int count=0;

int stat[9]={FALSE};

int C_List[9]={0};

int StarterDirection[9][9]=

{

//1,2,3,4,5,6,7,8,9 node

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

{1,1,1,0,1,0,1,1,1},

{1,1,1,1,0,1,1,1,1},

{1,1,1,0,1,0,1,1,1},

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

};

int direction[9][9]=

{

//1,2,3,4,5,6,7,8,9 node

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

{1,1,1,0,1,0,1,1,1},

{1,1,1,1,0,1,1,1,1},

{1,1,1,0,1,0,1,1,1},

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

};

//

int CaculateRouter(int stat[9])

{

//caculate the node direction

int i,j;

for(i=0;i<9;i++)

{

for(j=0;j<9&&direction[i][j]==0;j++)

{

if((i+j)/2.0-int((i+j)/2.0) == 0.0 && stat[(i+j)/2]==TRUE&&i!=j)//

direction[i][j]=1;

}

}

for(i=0;i<9;i++)

{

if(stat[i]==TRUE)//fix the matrix of CanGet,cut the havelinked node

for(j=0;j<9;j++)

direction[j][i]=0;

}

return 1;

}

int Build(int node,int level)//level start from 0

{

if(level== layer-1)

{

count++;

//printf("Find One!----%ld\n",count);

return 1;

}

for(int k=0;k<9;k++)

{

if(direction[node][k]==1)

{

int i,j;

//临时存储现场

int temp1[9][9];

int stat1[9];

for(i=0;i<9;i++)

stat1[i]=stat[i];

for(i=0;i<9;i++)

for(j=0;j<9;j++)

temp1[i][j]=direction[i][j];

stat[node]=TRUE;

level ++;

//以上为保存现场

CaculateRouter(stat);

Build(k,level);

//恢复现场

stat[node]=FALSE;

level--;

node++;

for(i=0;i<9;i++)

for(j=0;j<9;j++)

direction[i][j]=temp1[i][j];

for(i=0;i<9;i++)

stat[i]=stat1[i];

}

}

}

/*

if (level == layer)

{

count++;

level--;

printf("\n Find One!!!\n");

int i,j;

for(i=0;i<9;i++)

for(j=0;j<9;j++)

directionPoint[i][j]=direction[i][j];

return 1;

}

while(node<9)

{

if(stat[node]==TRUE)

return 0;

int j=0;

stat[node]=TRUE;

printf("%d-->",node);

while(j<9 )

{

if(directionPoint[node][j] == 1)

{

CaculateRouter(stat,directionPoint);

level++;

DFS9GongGe(stat,j,level,directionPoint);

}

j++;

}

stat[node]=FALSE;

node++;

return 1;

}

return 1;

*/

int main()

{

int Pointdirection[9][9]=

{

//1,2,3,4,5,6,7,8,9 node

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

{1,1,1,0,1,0,1,1,1},

{1,1,1,1,0,1,1,1,1},

{1,1,1,0,1,0,1,1,1},

{0,1,0,1,1,1,0,1,0},

{1,0,1,1,1,1,1,0,1},

{0,1,0,1,1,1,0,1,0},

};

int num=4;

while(num<=9)

{

layer =num;

num++;

Build(0,0);

}

printf("Total = %ld",count);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

脚注

对代码几点解释:

1、代码有部分冗余,但是完全可以运行

2、矩阵为连接矩阵,每次递归需要修改

3、通过全局变量实现对程序的控制。

4、程序结果可以妙出,但是对于16个点的四乘四矩阵运算时间较长,下次发文会对4X4矩阵的算法。

5、通过该程序对递归程序的有了一定了解,在编译器阶段,将程序不是debug版本,直接出exe可执行文件。利用IDA反编译程序,发现程序在编译阶段进行了一定的优化。下一步准备改造程序,利用栈和队列构造生成树,不采用递归算法。

程序生成结果

---------------------

作者:二进制程序猿

原文:https://blog.csdn.net/syh_486_007/article/details/50837768

版权声明:本文为博主原创文章,转载请附上博文链接!

九宫格C语言递归程序,九宫格程序代码 共享并希望大家多提意见相关推荐

  1. 九宫格C语言递归程序,[置顶] C语言递归实现N宫格(九宫格)源码

    刚开始做九宫格的时候,能想到的就是几个for循环,很清楚很简单,同样也比较的低级,了解递归的魅力后,在高人的指点下,原来也可以这样的实现,写到这时,让我想到了当年教我们的老师,thanx,好代码,我还 ...

  2. c语言线索二叉树作用,C语言递归实现线索二叉树

    本文实例为大家分享了C语言递归实现线索二叉树的具体代码,供大家参考,具体内容如下 描述:将二叉树中结点的空左孩子指针域指向前驱结点,将空的右孩子指针域指向后继结点. code: #pragma war ...

  3. 汉塔克问题(C语言递归)

    汉塔克问题(C语言递归) 操作步骤 代码 操作步骤 当n为1时直接将盘子从第一个柱子移动到第三个柱子. 当 n>1时,先借助第三个柱子将n-1个盘子移动到第二个柱子,然后将第n个盘子从第一个柱子 ...

  4. 包r语言_R语言代码共享:制作R包

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  5. 微信小程序九宫格图的排版----注意层次排版(层次最重要)

    微信小程序九宫格图的排版----注意层次排版(层次最重要) 1.wxml中的代码(图片和数据都是网页获取来的,详细下看) 2.排版 3.使用.js文件进行事件加载 | | | |

  6. python语言能够整合各类程序代码-python语言概述

    python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...

  7. c语言程序2000行代码,C语言教务管理系统2000行代码

    <C语言教务管理系统2000行代码>由会员分享,可在线阅读,更多相关<C语言教务管理系统2000行代码(56页珍藏版)>请在读根文库上搜索. 1.C语言教务管理系统一.程序结构 ...

  8. fifo算法c语言程序代码,c语言实现fifo算法及代码

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  9. c语言祝生日快乐的程序,C语言如何编程生日快乐代码

    C语言编程生日快乐代码的方法:首先要按[CTRL+R]键,cmd进入命令行,输入pip install turtle安装第三方库:然后打开C语言编辑器,将相关代码复制进去:最后按快捷键F5进行保存且执 ...

  10. C语言是作为一个程序员必须了解的,那么你知道怎样学习C语言吗?

    在这里我给大家写出了一点点小计划,不喜勿喷,谢谢! 一.要学习的书 <c缺陷和陷阱>.<c和指针>.<c专家编程>. 二.知识点学习 ①字符串 1. strlen( ...

最新文章

  1. LINUX 硬链接与软链接的区别
  2. fpga电平约束有什么作用_FPGA从串模式
  3. 大咖茶话会 | 与原新浪微博副总裁零距离沟通
  4. div弹窗如何设置不超出页面_js实现弹窗功能(以支付方式为例)
  5. java排班_使用java规则引擎Drools自动排班前言.doc
  6. 三星Galaxy Note 10系列价格曝光:顶配售价要破万
  7. 博科brocade光纤交换机alias-zone的划分--实操案例
  8. CF1042C Array Product
  9. 软件工程 -- 开发模型
  10. C# Windows Service与Timer(计时器)
  11. jquery获取span标签下的第一个span子标签内容
  12. 零基础入门数据挖掘之金融风控-贷款违约预测
  13. Android 自动化测试Monkey、Monkeyrunner
  14. AndroidQ与腾讯tbs的兼容问题
  15. Win10左下角搜索栏以及资源管理器搜索栏无法使用(点击没有反应)
  16. 街头手提电脑交易骗术揭秘
  17. 网络安全技术与应用实验——SSL验证分析 基于DTLS的安全服务器设计
  18. 云之梦php免费教学视频下载_[全套视频] 云知梦2017最新PHP工程师全套视频教程 laravel框架版...
  19. Inventor之入门
  20. 基于http请求web打印组件,实现浏览器、移动端、服务端无预览打印

热门文章

  1. 李阳疯狂英语助教工作总结
  2. javascript 动态画心加文字
  3. 日系P2P原理探究(一) — Winny元祖: Freenet
  4. 夸克服务器过载或暂停维修,服务器过载或CGI脚本出错
  5. 两年数据对比柱形图_堆积柱形图+散点图=数据对比完美呈现(附视频)
  6. 重磅|如何利用NBA球员推文预测其球场表现?
  7. 树莓派Python开发第8课: PWM实验
  8. 2018年嵌入式处理器报告:神经网络加速器的崛起
  9. java经纬度转平面坐标_经纬度到平面坐标的相互转换
  10. 记录一下Material Dialogs的使用