大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要为大家展示了“C语言如何实现解数独程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何实现解数独程序”这篇文章吧。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、网页空间、营销软件、网站建设、鼓楼网站维护、网站推广。
用C语言写的解数独的程序。在linux下测试成功运行。
效果如图:
这是带解的数独,需要填写的部分用数字0代替。
这是程序运行后的效果图。看看,数独已经搞定啦。
程序源码如下:
#include#include #define SIZE 9 #define get_low_bit(x) ((~x&(x-1))+1) struct{ int left; char num; char try; }board[SIZE][SIZE]; int bit2num(int bit) { switch(bit){ case 1:case 2: return bit; case 4: return 3; case 8: return 4; case 16: return 5; case 32: return 6; case 64: return 7; case 128: return 8; case 256: return 9; } } void printf_res() { int i, j, k; for(i=0; i 0) printf("\033[0;31m%2d\033[0m", board[i][j].num); else printf("%2d", board[i][j].try); } printf("|\n"); } for(i=0; i 0) sub(i, j, 1<<(board[i][j].num-1)); else if(board[i][j].try > 0) sub(i, j, 1<<(board[i][j].try-1)); } void add(int i, int j, int bit) { int k, m; for(k=0; k 0) solve(pos+1); else for(left=board[i][j].left; left; left&=(left-1)) { bit = get_low_bit(left); sub(i, j, bit); board[i][j].try = bit2num(bit); solve(pos+1); add(i, j, bit); board[i][j].try=0; init(); } } int main() { int i, j, c; for(i=0; i '9') ; board[i][j].num = c-'0'; board[i][j].try = 0; board[i][j].left = 0x0001FF; } init(); solve(0); return 0; }
以上是“C语言如何实现解数独程序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!