#include <stdio.h>
#include <string.h>
int filter[10][10]; //用于存放是否适合连接
int stamp[9]; //用于存放上一次连的是哪个数字
bool vis[10]; //用于标记是否已经用过
int result; //用于输出最后的结果
void dfs(int count)
{
if(count>=4) //只要是大于四个就加一,但是不返回。
{
result++;
}
for(int i=1;i<=9;i++)
{
if(count>0&&!vis[filter[stamp[count-1]][i]])
continue;
if(!vis[i])
{
vis[i]=1;
stamp[count]=i;
dfs(count+1);
vis[i]=0;
}
}
return ;
}
int main()
{
memset(filter,0,sizeof(filter));
filter[1][3]=filter[3][1]=2;
filter[4][6]=filter[6][4]=5;
filter[7][9]=filter[9][7]=8;
filter[1][7]=filter[7][1]=4;
filter[2][8]=filter[8][2]=5;
filter[3][9]=filter[9][3]=6;
filter[1][9]=filter[9][1]=5;
filter[3][7]=filter[7][3]=5;
result=0;
vis[0]=true;
dfs(0);
printf("%d\n",result);
}
手机九宫格解锁所有可能
最新推荐文章于 2021-05-30 18:59:16 发布
本文介绍了一个九宫格数字游戏中的路径计数问题,通过递归深度优先搜索算法来计算从任意起点到任意终点的有效路径数量。文中详细展示了如何使用C语言实现这一算法,并考虑了不同数字之间的连接规则。

4335

被折叠的 条评论
为什么被折叠?



