【CCPC】hdu 5547Sudoku【dfs】
来源:互联网 发布:淘宝上纯粮酒 编辑:程序博客网 时间:2024/05/22 10:23
题目:hdu 5547 Sudoku
题意:给你一个4*4的数独,让你填其中未知的数
坑点
1:虽然斜线不用满足每个格子唯一,但是4*4的格子分成4个,每个2*2的格子必须满足数独
2:答案不唯一的输出所有的情况,即暴力搜索的时候要回溯。
ac代码:
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <map>#include <cstdio>#include <cstring>using namespace std;const int N = 6;int mp[N][N];bool solve(int val ,int pel, int x){ bool flag[5]; memset(flag,false,sizeof(flag)); for(int i=0 ;i<4; ++i) { if(mp[val][i]!=-1) flag[ mp[val][i] ] = true; if(mp[i][pel]!=-1) flag[ mp[i][pel] ] = true; } int va = val /2,pe = pel / 2; for(int i = va*2; i<=va*2+1; ++i) { for(int j=pe*2; j<=pe*2+1; ++j) { if(mp[i][j]!=-1) flag[ mp[i][j] ] = true; } } if(flag[ x ] == false) return true; return false;}void print(){ for(int i=0;i<4;++i) { for(int j=0;j<4;++j) printf("%d",mp[i][j]); puts(""); }}void dfs(int cal, int pel){// printf("you: %d %d %d\n",cal,pel,mp[cal][pel]); if(cal==4 && pel == 0) { print();return ; } int cal_next = cal,pel_next = pel; if(pel==3) ++cal_next,pel_next = 0; else //注意些深搜代码不能想当然,逻辑一定要写清楚 ++pel_next; if(mp[cal][pel] == -1) { for(int i=1;i<=4;++i) { if(solve(cal,pel,i)){// printf("you: %d %d %d\n",cal,pel,i); mp[cal][pel] = i; dfs(cal_next, pel_next); } } mp[cal][pel] = -1; } else dfs(cal_next,pel_next);}int main(){ freopen("Input.txt","r",stdin);// freopen("OUt.txt","w",stdout); int T; scanf("%d",&T); for(int cas = 1; cas <=T; ++cas) { string s[5]; for(int i=0;i<4;++i) cin>>s[i]; for(int i=0; i<4; ++i) { for(int j=0; j<4; ++j) { char c = s[i][j]; if(c!='*') mp[i][j] = (c-'0'); else mp[i][j] = -1; } } printf("Case #%d:\n",cas); dfs(0,0); } return 0;}
0 0
- 【CCPC】hdu 5547Sudoku【dfs】
- H - Sudoku【ccpc dfs】
- hdu 5547 Sudoku【dfs】
- hdu 5547 Sudoku(dfs)
- 2015 南阳 CCPC hdu5547 Sudoku(DFS)
- HDU5547 Sudoku(深搜DFS)(2015CCPC)
- hdu 1426 Sudoku Killer dfs
- 【DFS】hdu 1426 Sudoku Killer
- HDU 1426--Sudoku Killer【DFS】
- HDU-1426-Sudoku Killer【DFS】
- 【HDU 1426 Sudoku Killer】+ DFS
- HDU 1426 Sudoku Killer DFS
- HDU 1426 Sudoku Killer (DFS)
- hdu 5547 Sudoku dfs 暴力回溯 解题报告
- HDU 5547 Sudoku(dfs+模拟+状态判断)
- CCPC-CDOJ-1222-Sudoku
- ccpc Sudoku(搜索)
- hdu 3111 Sudoku(DFS数独)
- 从单线程到多线程-概述
- Spring jar包 相关介绍
- MyBatis动态参数排序的注意事项
- 二维数组动态分配内存
- javascript:;与javascript:void(0)使用介绍
- 【CCPC】hdu 5547Sudoku【dfs】
- MultipartRequest上传文件
- SPI接口
- java中equal方法和hashCode的理解
- Spark中稀疏矩阵的存储方式
- eclipse.ini内存设置(转)
- vim# set
- App installation failed. There was an internal API error.解决办法
- Super关键字