数独-Sudoku

#include
#include 
#include 
using namespace std;
bool isValid(std::vector> &chess,
                    int x,int y,int val){
    bool ret=true;
    for(int j=0;j<9;j++){
        if(j==y) continue;
        if(val==chess.at(x).at(j)){
            ret=false;
            return ret;
        }
    }
    for(int i=0;i<9;i++){
        if(i==x) continue;
        if(val==chess.at(i).at(y)){
            ret=false;
            return ret;
        }
    }
    int new_x=x/3,new_y=y/3;
    int tl_x=new_x*3,tl_y=new_y*3;
    for(int i=tl_x;i> &matrix,
                      std::vector& pos,int n){
        bool ret=false;
        if(n==pos.size()){
            return true;
        }
        for(int i=1;i<=9;i++){
            pos.at(n).val=i;
            if(isValid(matrix,pos.at(n).x,pos.at(n).y,i)){
                matrix.at(pos.at(n).x).at(pos.at(n).y)=i;
                ret=backTracking(matrix,pos,n+1);
                if(ret){
                    break;
                }else{
                    matrix.at(pos.at(n).x).at(pos.at(n).y)=0;
                }
            }
        }
        return ret;
    }
    void findSolution(std::vector> &matrix,
                      std::vector& pos){
        bool ret=false;
        for(int i=1;i<=9;i++){
            pos.at(0).val=i;
            if(isValid(matrix,pos.at(0).x,pos.at(0).y,i)){
                matrix.at(pos.at(0).x).at(pos.at(0).y)=i;
                ret=backTracking(matrix,pos,1);
                if(ret){
                    break;
                }else{
                    matrix.at(pos.at(0).x).at(pos.at(0).y)=0;
                }
            }
        }
        if(ret){
            int len=pos.size();
            for(int i=0;i> matrix;
    matrix.resize(9,std::vector());
    std::vector zero_pos;
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            int num;
            std::cin>>num;
            matrix.at(i).push_back(num);
            if(0==num){
                zero_pos.push_back(Pos(i,j));
            }
        }
    }
    Solution so;
    so.findSolution(matrix,zero_pos);
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            if(8==j){
                std::cout<

你可能感兴趣的:(数独-Sudoku)