zoukankan      html  css  js  c++  java
  • Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells.

    Empty cells are indicated by the character '.'.

    You may assume that there will be only one unique solution.

    A sudoku puzzle...

     

    ...and its solution numbers marked in red.

    思路:这道题给你列出一些数字,然后完成后面的数独操作。首先我们定义一个函数判断每一行、每一列以及九宫格内是否存在相同的元素,如果存在则返回false;然后,对每一行每一列进行遍历,如果该位置为'.'时,按照1~9字符替换,并同时判断是否符合数独要求以及回溯遍历该数独,满足条件则返回true,如果不满足,则重新替换为'.',再进行判断。

    class Solution {
    public:
        bool IsSudoku(vector<vector<char> > &board,int x,int y)
        {
            int i,j;
            for(i=0;i<9;i++)
            {
                if(i!=x&&board[i][y]==board[x][y])
                {
                    return false;
                }
            }
            for(j=0;j<9;j++)
            {
                if(j!=y&&board[x][j]==board[x][y])
                    return false;
            }
            int m=(x/3)*3;
            int n=(y/3)*3;
            for(i=0;i<3;i++)
            {
                for(j=0;j<3;j++)
                {
                    if((i+m!=x)&&(j+n!=y)&&board[i+m][j+n]==board[x][y])
                        return false;
                }
            }
            return true;
        }
        bool Sudoku(vector<vector<char> > &board)
        {
            for(int i=0;i<9;i++)
            {
                for(int j=0;j<9;j++)
                {
                    if(board[i][j]=='.')
                    {
                        for(char k='1';k<='9';k++)
                        {
                            board[i][j]=k;
                            if(IsSudoku(board,i,j)&&Sudoku(board))
                                return true;
                            board[i][j]='.';
                        }
                        return false;
                    }
                }
            }
            return true;
        }
        void solveSudoku(vector<vector<char> > &board) {
            Sudoku(board);
        }
    };
  • 相关阅读:
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    第七次作业之总结篇
    第八次_计算器重构
    第六次作业之计算器图形界面化
    C++课程 second work _1025
    第五次作业--计算器项目之学习文件读取方式
    C++课程 first work
    第四次作业-计算功能的实现
  • 原文地址:https://www.cnblogs.com/awy-blog/p/3790650.html
Copyright © 2011-2022 走看看