Leetcode上的题(所以请不要在class Solution外改),我想声明一个空指针(直接用nullptr没法用,说我auto推断类型错误)用static cube NullCube[9][9]; 在cube类里声明了。但是运行时显示NullCube没有实例化,在各处加上cube::NullCube都没法成功,不知道应该怎么修改?
#include <vector>
#include <iostream>
using std::vector;
class Solution {
class cube{
public:
int value=-1;
int avail[10] = {1,1,1,1,1,1,1,1,1,1}; //avail<=0 means not available
int stillAvail=10;
static cube NullCube[9][9]; /////////////////////////WHYYYYYY CAN'T I USE THIS POINTER????????
static bool cube_put(int num,int x,int y,cube board[9][9]){
board[x][y].value=num;
int i,j;
int flag = true;
for(i=0;i<9;i++) {
flag = flag && RmvPsb(num, i, y, board);
flag = flag && RmvPsb(num, x, i, board);
if (x == y) flag = flag && RmvPsb(num, i, i, board);
if (x + y == 8) flag = flag && RmvPsb(num, i, 8 - 1, board);
}
return flag;
};
static bool RmvPsb(int num,int x,int y,cube board[9][9]){
board[x][y].avail[num] -=1;
if(board[x][y].avail[num]==0) board[x][y].stillAvail-=1;
if(board[x][y].value == -1 && board[x][y].stillAvail<=0) return false;
return true;
}
static bool locale0(cube board[9][9],int &x,int &y){
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
if(board[i][j].value==-1){
x=i;
y=j;
return true;
}
}
}
std::cout<<"no more -1 now!";
return false;
}
static auto search(cube board[9][9]){
int x,y;
if(!locale0(board,x,y)) return board;
std::cout<<"searching for: \n";
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
std::cout<<board[i][j].value<<" ";
}
std::cout<<"\n";
}
for (int i = 0; i <= 9; ++i) {
if(board[x][y].avail[i]==1){
cube board_[9][9];
for (int j = 0; j < 9; ++j) {
for (int k = 0; k < 9; ++k) {
board_[j][k]=board[j][k];
}
}//copy a new board
if(cube_put(i,x,y,board_)== false){
continue;
}
auto p=search(board_);
if(p!= NullCube) {std::cout<<"find it"<<p<<"\n";return p;}
}
}
return NullCube;
}
};
public:
void solveSudoku(vector<vector<char>>& board) {
cube::NullCube;
int i,j;
cube b[9][9];
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(board[i][j]!='.'){
cube::cube_put(int(board[i][j]-'0'),i,j,b);
}
}
}
cube::search(b);
}
};
int main(){
char s[9][9]= {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},
{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},
{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};
vector<vector<char>> v(9,vector<char>(9));
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
v[i][j]=s[i][j];
}
}
Solution c;
c.solveSudoku(v);
return 0;
}