#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>//       ______      ////                    ////     定义全局变量 ////                    ////        ~~~~~~      ////记忆哪个位置放了结点的数组
int record[3][3]={0};//计数(有多少种情况)变量
int count=0;//记录待放入的结点的前一个结点的坐标(通过函数查找后暂时放在这里)
int iBefTemp=-1,jBefTemp=-1;//        ______      ////                    ////        主函数     ////                    ////        ~~~~~~      //int main()
{//函数声明void befNodePos(int n);int checkLine(int i);int checkList(int j);int checkCorner(int i,int j);void print(int a[3][3]);int ifCanPut(int i,int j,int n);int askIfPrint();void putInTurn(int n,int sumNum,int ifPrint);//主函数中的变量定义int i,sumSolution=0;int rememberPrint;//确定是否进行打印所有情况rememberPrint=askIfPrint();for(i=1;i<=9;i++){putInTurn(1,i,rememberPrint);sumSolution+=count;printf("\t当连接%d个点时候有%d种连法\n\t\t累计至此有%d种连法\n\n\n",i,count,sumSolution);  count=0;}printf("\n\n所以,总共有%d种可能的连接方法。\n\n\n",sumSolution);return 0;
}//     ______      ////                    ////     其他函数定义 ////                    ////        ~~~~~~      ////找到前一个结点的坐标并将坐标值放置在全局变量iBefTemp和jBefTemp里
void befNodePos(int n)
{int i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){if(record[i][j]==n-1){iBefTemp=i;jBefTemp=j;return;}}}}//判断间隔位置是否有结点放置。(横向判断)
int checkLine(int i)
{if(record[i][1]==0)return 0;elsereturn 1;
}//判断间隔位置是否有结点放置。(纵向判断)
int checkList(int j)
{if(record[1][j]==0)return 0;elsereturn 1;
}//判断ij位置是否为顶角位置
int checkCorner(int i,int j)
{if(i+j==2&&i!=j||i+j==0||i+j==4)return 1;elsereturn 0;
}//打印的函数
void print(int a[3][3])
{int i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%3d",a[i][j]);}printf("\n");}printf("\n");getch();
}//询问是否打印所有情况
int askIfPrint()
{int boo;printf("\n\n\t\t\t九宫格锁屏程序\n\n");printf("你是否想知道每一次的具体连法:\n");printf("1.是的,我想看看具体是怎么连的。(提示:情况非常之多)\n");printf("2.不,我不必知道具体都是怎么连的,我只想知道有多少种情况。\n\t\t我选择:");scanf("%d",&boo);if(boo==1)return 1;elsereturn 0;
}//     _________________       ////                                ////        判断能否放在ij位置      ////                                ////        ~~~~~~~~~~~~~~~~~~      //int ifCanPut(int i,int j,int n)
{//如果这个位置还没有放置结点if(record[i][j]==0){//找到前一个结点的坐标放在全局变量里面//如果是在放置第一个结点,则不必找它的前一个结点,任何一个位置都是合适的。if(n==1){//因为是放置第一个结点,所以不必判断它跟前一个结点的关系return 1;}//放置除了第一个结点之外的结点,需要判断它个前一个结点的关系。else if(n<=9){    iBefTemp=-1;jBefTemp=-1;befNodePos(n);//当中间有间隔位置时(横向判断)。if(i==iBefTemp&&abs(j-jBefTemp)==2){//判断间隔位置是否有结点放置。if(checkLine(i)){//已经有结点//可以放置........return 1;}else{//没有结点放置///不能放置在ij这里return 0;}}//当中间有间隔位置时(纵向判断)。else if(j==jBefTemp&&abs(i-iBefTemp)==2){//判断间隔位置是否有结点放置。if(checkList(j)){//已经有结点//可以放置.............return 1;}else{//没有结点//不能放置在ij这里return 0;}}//当二者为对角关系时else if(checkCorner(i,j)&&checkCorner(iBefTemp,jBefTemp)&&(i!=iBefTemp&&j!=jBefTemp)){//判断中间位置是否有结点放置。if(record[1][1]!=0){//中间位置已经放置了结点//可以放置在ij......return 1;}else{//中间位置没有放置结点,不能放置在ijreturn 0;} }//二者中间没有间隔位置,从而可以直接放置。else{//可以放置...........return 1;}}}//如果这个位置已经放置了结点,不能放置结点else{return 0;}}//     ______      ////                    ////        主算法     ////                    ////        ~~~~~~      //void putInTurn(int n,int sumNum,int ifPrint)
{int i,j;if(n==sumNum+1){//已经放置完9个结点,进行计数。count++;if(ifPrint){print(record);}return;}//尝试将其放置在i行j列。for(i=0;i<3;i++){for(j=0;j<3;j++){if(ifCanPut(i,j,n)){record[i][j]=n;putInTurn(n+1,sumNum,ifPrint);//这个语句很重要!这是递归能否进行的决定性语句。record[i][j]=0;}}}}




												

九宫格(安卓手机的图形锁有几种解锁图案)相关推荐

  1. android查ip地址,安卓手机查看IP地址的两种方法,  二、进入手机状态

    安卓手机查看IP地址的两种方法, 二.进入手机状态 无论是电脑链接宽带上网还是手机链接wifi上网,当我们在链接网络后,会自动分配一个独立的IP地址,对于电脑端的上网IP地址我们可通过ipconfig ...

  2. android 图案解锁忘记了,安卓手机忘记图形解锁、锁屏密码的解决方法

    Android 手机的图形解锁倒是真的好用了,主要是方便新颖,并且便于记忆,自从有了图形解锁,很多人都不再使用密码屏幕锁了,图形解锁倒是好玩,但是经常换来换去的话就会造成一时间想不起哪个图形解锁图案才 ...

  3. 华为、小米、红米、魅族、oppo、三星、vivo安卓手机解除账户锁

    为大家分享解除安卓手机账户锁的经验.为什么说是经验呢,因为故事是这样开始的(嫌啰嗦的直接看红色字): 朋友买了新手机,我就向他要旧手机用. 但我刷机把他这手机刷坏了(魅族mx4),无限重启.不能进入卡 ...

  4. java里面常用的锁屏图案_最常用的100种解锁图案(附:手机图案万能解锁法)...

    说到九宫格解锁,相信很多用户都认识,日常使用手机中,将锁屏设置成九宫格图案,不仅可以保护个人隐私,还可增加手机解锁的趣味性,对此,很多机智的网友脑洞大开设计了一系列解锁图案,通过不同的组合方式将解锁图 ...

  5. android ip查看工具,安卓手机查看IP地址的两种方法

    无论是电脑链接宽带上网还是手机链接wifi上网,当我们在链接网络后,会自动分配一个独立的IP地址,对于电脑端的上网IP地址我们可通过ipconfig/all命令来查看,那么如果在手机端的话应该如何查看 ...

  6. android 自动锁屏设置,如何才能使安卓手机不自动锁屏?改成自动黑屏,谢谢

    一.线刷 用刷机软件,比如刷机大师.刷机精灵.卓大师.深度刷机.奇兔刷机.甜椒 二.卡刷 进入Recovery模式卡刷 进入Recovery模式方法: 方法一:如果手机是开机状态,请先关机,抠下电池再 ...

  7. android wifi 静态地址设置_安卓手机连接wifi故障的6种常见解决方法

    现如今,人们已经离不开wifi的使用了,有了wifi,流量不够用什么的都是浮云.如果手机连接wifi出了问题怎么办?不要抓狂不要沮丧,六招让你手机wifi满血复活! 第一招:关闭并重启WIFI连接 用 ...

  8. 小程序富文本解析wxParse 安卓手机部分不支持的一种情形

    背景: 建议,对富文本的解析,还是使用官方提供的 <rich-text> 比较好,可参考文章:微信小程序 rich-text 富文本的解析显示 在小程序开发过程中,必然会涉及到富文本的解析 ...

  9. 如何破解安卓手机上的图形锁(九宫格锁)

    http://mobile.51cto.com/iphone-441496.htm 安卓手机的图形锁(九宫格)是3×3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9 ...

  10. 基于Python的安卓图形锁破解程序

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不 ...

最新文章

  1. JRebel for IntelliJ 热部署方法
  2. pytorch 实现transformer
  3. Linux 在一个命令行上执行多个命令
  4. Happy Holidays and Season's Greetings Everyone!
  5. 固件是通用的吗_如何升级AirPods固件?
  6. 为什么系统调用会消耗较多资源?系统调用的三种方法:软件中断(分析过程)、SYSCALL指令、vDSO(虚拟动态链接对象linux-vdso.so.1)
  7. java多线程基础_java线程基础
  8. R与Python或协同助力机器学习:听Azure ML Studio讲座有感
  9. linux中安装mysql5.1.73_linux安装mysql(5.1.73)
  10. Atitit linux获取项目运行环境版本
  11. 金蝶KIS财务软件如何查看去年的账套
  12. Android截图功能
  13. CentOS 7下atime如何变化的问题(转)
  14. 机器学习笔记1.矩估计、极大似然估计。
  15. Gsensor驱动概述
  16. 河北计算机软件职业技术学院,河北软件职业技术学院
  17. windows 进程监控 Procmon.exe
  18. 虚函数多态性实现求几何图形面积
  19. mongdb compass 可视化工具的使用
  20. 归并排序实现(JAVA)

热门文章

  1. 静态分析之数据流分析与 SSA 入门 (一)
  2. buuctf_[ACTF新生赛2020]swp
  3. 格拉姆矩阵(Gram matrix)详细解读
  4. 【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用
  5. 360又抢了12306的风头:它为什么能提前49天订票?
  6. 超声波传感器(CHx01) 学习笔记 Ⅵ - 原始数据
  7. springboot 2.X——短信网关使用初体验
  8. 自动驾驶轨迹规划--算法综述
  9. 集合框架ArrayList 源码分析(二)
  10. ValueError: y contains previously unseen labels: ‘103125‘