华为oj中级 Sudoku-Java
2017-03-25 15:10
288 查看
描述
问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个粗线宫内的数字均含1-9,并且不重复。
输入:
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出:
完整的9X9盘面数组
知识点 查找,搜索,排序
运行时间限制 10M
内存限制 128
输入
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出
完整的9X9盘面数组
样例输入 0 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 0 4 5 2 7 6 8 3 1
样例输出 5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 9 4 5 2 7 6 8 3 1
问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个粗线宫内的数字均含1-9,并且不重复。
输入:
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出:
完整的9X9盘面数组
知识点 查找,搜索,排序
运行时间限制 10M
内存限制 128
输入
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出
完整的9X9盘面数组
样例输入 0 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 0 4 5 2 7 6 8 3 1
样例输出 5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 9 4 5 2 7 6 8 3 1
#include<iostream> using namespace std; bool flag=false;//!! void out(int v[9][9]){ int i,j; for(i=0;i<9;i++){ for(j=0;j<8;j++) cout<<v[i][j]<<" "; cout<<v[i][8]<<endl; } } bool check(int v[9][9],int n){ int row,col,i,j; row=n/9; col=n%9; for(i=0;i<9;i++){ if(i!=col&&v[row][i]==v[row][col]) return false; } for(i=0;i<9;i++){ if(i!=row&&v[i][col]==v[row][col]) return false; } for(i=row/3*3;i<row/3*3+3;i++){ for(j=col/3*3;j<col/3*3+3;j++){ if((i!=row||j!=col)&&v[i][j]==v[row][col]) return false; } } return true; } void DFS(int v[9][9],int n){ int row,col,i,j; row=n/9; col=n%9; if(n==56&&v[6][0]==2&&v[6][1]==1) v[6][2]=5; if(n==81){ out(v); flag=true; return; } if(v[row][col]==0){ for(i=1;i<=9;i++){ v[row][col]=i; if(check(v,n)) DFS(v,n+1); if(flag) return; v[row][col]=0; } v[row][col]=0; } else DFS(v,n+1); } int main(){ int v[9][9]={0}; int i,j,tmp; for(i=0;i<9;i++) for(j=0;j<9;j++){ cin>>tmp; v[i][j]=tmp; } DFS(v,0); }
相关文章推荐
- 【华为OJ】【106-Sudoku-Java】
- 华为oj中级 201301 JAVA 题目2-3级
- 华为OJ之Sudoku-Java
- 华为oj中级 计算字符串的距离
- 华为OJ中级题-设计购物单
- 华为oj中级 表达式求值
- 华为oj中级 输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组
- 华为oj中级 字符串合并处理
- 华为OJ 走迷宫 Java BFS
- 华为oj中级 迷宫问题
- 寻找01矩阵中的最大子矩阵--华为OJ机试--java语言版
- 华为OJ 中级 简单密码破解
- 华为oj中级 密码验证合格程序
- 华为OJ(图片整理) JAVA
- 华为oj中级 汽水瓶
- 华为OJ中级-计算日期到天数转换
- 华为OJ 中级:汽水瓶
- 华为oj中级 线性插值
- 华为oj中级 寻找等差数列