POJ-2676-Sudoku-DFS
来源:互联网 发布:管家婆软件创业版 编辑:程序博客网 时间:2024/06/04 18:13
题意:每行每列每个九空格数字不同,输出一种符合题意即可
思路:
DFS&暴力
正着搜跑560,反着16ms;和这个题相似的题3074,数据厉害,这个代码过不了
#include<stdio.h>#include<string.h>#include<stdlib.h>int mp[10][10];int mx[10][10];int my[10][10];int mk[10][10];int cp;struct node///需要填的空{ int x; int y;}ls[85];int dfs(int st){ int i, j; if(st == cp) { for(i = 0; i < 9; i++) { for(j = 0; j < 9; j++) { printf("%d",mp[i][j]); } printf("\n"); } return 2; } int flag = 0; for(i = 1; i <= 9; i++) { int x = ls[st].x; int y = ls[st].y; int k=3*((x)/3)+(y)/3+1; if(!mx[x][i]&&!my[y][i]&&!mk[k][i]) { mp[x][y] = i; mx[x][i] = 1; my[y][i] = 1; mk[k][i] = 1; flag = dfs(st+1); if(flag == 2) return 2;///满足条件,不再继续 mp[x][y] = 0; mx[x][i] = 0; my[y][i] = 0; mk[k][i] = 0; } }}int main(){ int t; scanf("%d",&t); while(t--) { memset(mx,0,sizeof(mx)); memset(my,0,sizeof(my)); memset(mk,0,sizeof(mk)); int i, j; cp = 0; for(i = 0; i < 9; i++) { char c[15]; scanf("%s",c); for(j = 0; j < 9; j++) { mp[i][j] = c[j]-'0'; if(mp[i][j] == 0) { ls[cp].x = i; ls[cp].y = j; cp++; } int k=3*(i/3)+j/3+1; mx[i][mp[i][j]] = 1;///每行出现过的数字 my[j][mp[i][j]] = 1;///每列出现过的数字 mk[k][mp[i][j]] = 1;///每个3X3的九宫格出现过的数字 } } dfs(0); } return 0;}
0 0
- POJ 2676 Sudoku dfs
- poj 2676 sudoku(DFS)
- POJ 2676 sudoku dfs
- POJ 2676 SuDoKu DFS
- POJ-2676-Sudoku-DFS
- [poj 2676] Sudoku DFS
- POJ-2676 Sudoku(DFS)
- POJ-2676 Sudoku(DFS)
- poj--2676 Sudoku(dfs)
- POJ 2676 sudoku DFS
- POJ-dfs-2676-Sudoku
- poj 2676 Sudoku(dfs)
- Poj 2676 Sudoku[dfs]
- POJ 2676 Sudoku 【dfs】
- POJ 2676 Sudoku(DFS回溯)
- poj 2676 Sudoku (dfs)
- POJ 2676-Sudoku(DFS)
- POJ 2676 Sudoku(dfs)
- webService学习记录-关于web项目配置的几点说明
- JavaScipt练习<filter()>
- Linux 下 gcc 与 g++的差别
- iphone手机上的抓包流程和原理概述
- Android Call requires API level 11 (current min is 8)的解决方案
- POJ-2676-Sudoku-DFS
- Maven学习总结(九)——使用Nexus搭建Maven私服
- setInterval()和setTimeout()
- ORA-12519, TNS:no appropriate service handler found
- C++ Primer : 第十二章 : 动态内存之shared_ptr类
- C#模拟PrtScn实现截屏
- UNIX Introduction
- SVN不错的入门
- 怎么将第三方的库文件只复制而不编译呢