幸运26是一个益智游戏,规则是在每个点上填上1-12,每个数字只能用一次,使每一条线上数字的和为26。
程序构思:
1.输入
2.使用DFS遍历
3.输出
DFS结构:

1.边界条件
2.遍历第i个数的所有可能
3.进入下一个数
DFS代码:
int vis[20],num[20],sum=0;//vis标记数字是否使用过,num存储数字,sum存储总数 void Lucky26(int i)//DFS,i表示第几个数 { if(i>12)//边界条件 { if(num[1]+num[2]+num[4]+num[5]==26&&num[3]+num[4]+num[6]+num[7]==26&&num[5]+num[6]+num[8]+num[9]==26&&num[7]+num[8]+num[10]+num[11]==26&&num[9]+num[10]+num[12]+num[1]==26&&num[11]+num[12]+num[2]+num[3]==26)//如果满足条件,总数+1,输出。 { sum++; for(int j=1;j<=12;j++)printf("%d ",num[j]); printf("\n"); } return; } for(int j=1;j<=12;j++)//遍历所有可能 { if(!vis[j])//判断是否使用过这个数,如果没有,标记使用,进入下一个数。 { num[i]=j; vis[j]=1; Lucky26(i+1); vis[j]=0; } } }
讯享网
main:
讯享网int main() { memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num));//清除 Lucky26(1);//DFS printf("幸运26一共有%d种解法",sum);//输出一共有多少种解法 _getch(); }
完整Code:
#include<stdio.h> #include<string.h> #include<conio.h> using namespace std; int vis[20],num[20],sum=0; void Lucky26(int i) { if(i>12) { if(num[1]+num[2]+num[4]+num[5]==26&&num[3]+num[4]+num[6]+num[7]==26&&num[5]+num[6]+num[8]+num[9]==26&&num[7]+num[8]+num[10]+num[11]==26&&num[9]+num[10]+num[12]+num[1]==26&&num[11]+num[12]+num[2]+num[3]==26) { sum++; for(int j=1;j<=12;j++)printf("%d ",num[j]); printf("\n"); } return; } for(int j=1;j<=12;j++) { if(!vis[j]) { num[i]=j; vis[j]=1; Lucky26(i+1); vis[j]=0; } } } int main() { memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num)); Lucky26(1); printf("幸运26一共有%d种解法",sum); _getch(); }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24368.html