求大佬帮忙看看为什么会Segmentation Fault
#include<iostream>
using namespace std;
const int N=12;
int row[N],col[N],grid[N],sod[N][N],cnt[2024],num[2024],tot,ans;
string s;
bool dfs(int num,int);
inline int g(int x, int y)
{
return ((x / 3) * 3) + (y / 3);
}
inline void flip(int x, int y, int z)
{
row[x] ^= 1 << z;
col[y] ^= 1 << z;
grid[g(x, y)] ^= 1 << z;
}
int main()
{
for (int i = 0; i < 9; i++)
row[i] = col[i] = grid[i] = (1 << 9) - 1;
cnt[0] = 0;
for (int i = 1; i < (1 << 9); i++) cnt[i] = cnt[i-(i&-i)] + 1;
for(int i=0; i<9; i++)
for(int j=0; j<9; j++)
{
cin>>sod[i][j];
if(sod[i][j]==0) { tot++;continue;}
flip(i, j, sod[i][j]-1);
}
int d=dfs(tot,4);
for(int i=0; i<9; i++)
for(int j=0; j<9; j++) ans+=sod[i][j];
cout<<ans;
}
bool dfs(int now,int ad)
{
//cout<<now<<" "<<ad<<endl;
if (now == 0) return 1;
if(ad<0) return 0;
int pd=1;
int temp = 10, x, y;
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
{
if(!((ad==i && (ad<=j&&j<=8-ad))||
(ad==j && (ad<=i&&i<=8-ad))||
(ad==(8-i) && (ad<=j&&j<=8-ad)) ||
(ad==(8-j) && (ad<=i&&i<=8-ad)) )) continue;
if (sod[i][j] != 0) continue;
pd=0;
int val = row[i] & col[j] & grid[g(i, j)]; //cout<<val<<endl;
if (val==0) return false;
if (cnt[val] < temp) {
temp = cnt[val];
x = i, y = j;
}
}
}
if(pd) if(dfs(now, ad-1)) return 1;
int val = row[x] & col[y] & grid[g(x, y)];
if(val==0) return false;
for (int k=8; k>=0; k--) if((val>>k)&1)
{
sod[x][y] = k+1;
flip(x, y, k);
if (dfs(now - 1,ad)) return 1;
flip(x, y, k);
sod[x][y] = 0;
}
return 0;
}