UVa 989

来源:互联网 发布:ubuntu软件库打不开 编辑:程序博客网 时间:2024/06/06 20:30

题目:数独。填充大小为1x1,4x4,9x9数独。

分析:搜索。直接利用dfs回溯求解。存储每行,每列,每个子块的数字使用情况,优化搜索。

说明:对于解有顺序要求,DL超时了 - -。

#include <cstring>#include <cstdio>int data[9][9];int b_id[9][9];int visit_r[10][10];int visit_c[10][10];int visit_b[10][10];int position[81];int dfs(int k, int size, int n){if (k == size) {return 1;}int p = position[k];int r = p/(n*n), c = p%(n*n), b = r/n*n + c/n;for (int v = 1; v <= n*n; ++ v) {if (!visit_r[r][v] && !visit_c[c][v] && !visit_b[b][v]) {visit_r[r][v] = 1;visit_c[c][v] = 1;visit_b[b][v] = 1;data[r][c] = v;if (dfs(k+1, size, n)) {return 1;}visit_r[r][v] = 0;visit_c[c][v] = 0;visit_b[b][v] = 0;}}return 0;} int main(){int n, t = 0;while (~scanf("%d",&n)) {if (t ++) {printf("\n");}for (int i = 0; i < n*n; ++ i) {for (int v = 1; v <= n*n; ++ v) {visit_r[i][v] = 0;visit_c[i][v] = 0;visit_b[i][v] = 0;}}int size = 0;for (int i = 0; i < n*n; ++ i) {for (int j = 0; j < n*n; ++ j) {scanf("%d",&data[i][j]);b_id[i][j] = i/n*n + j/n;if (data[i][j] == 0) {position[size ++] = i*n*n + j;}else {visit_r[i][data[i][j]] = 1;visit_c[j][data[i][j]] = 1;visit_b[b_id[i][j]][data[i][j]] = 1;}}}if (dfs(0, size, n)) {for (int i = 0; i < n*n; ++ i) {for (int j = 0; j < n*n; ++ j) {if (j) {printf(" ");}printf("%d",data[i][j]);}printf("\n");}}else {printf("NO SOLUTION\n");}}return 0;}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婷美化妆品价格表 婷美护肤品怎么样 婷美化妆品怎么样 倪虹洁婷美内衣广告 婷美丰胸内衣 婷美肌底液怎么样 婷美化妆品专卖店 婷美内衣多少钱一套 婷美化妆品批发 婷美精华肌底液价格 婷美内衣代理 婷美产后修复 婷美丰胸内衣多少钱 婷美瘦身衣专卖店 婷美丰胸内衣有用吗 婷美小屋面膜怎么样 婷美小屋怎么样 挺美 美肤宝bb 美姿 婺州 婺城 婺婿当道 婺怎么读 婺婿当道岳风 婺婿当道岳风txt下载 婺婿当道岳风txt 婺婿当道txt 婺婿当道岳风无弹窗口 婺婿当道岳飞 婺婿当道岳风趣笔阁 金华婺城 贠婺怎么读 中国婺剧院 婺婿当道岳风在哪里免费看 婺婿当道岳风txt免费下载 婺婿当道岳风全本免费阅读 婺婿当道岳风全本免费下载 婺剧 婺剧全集