萌新Segmentation Fault求助
查看原帖
萌新Segmentation Fault求助
218223
chenxsir楼主2020/9/28 13:02

求大佬帮忙看看为什么会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;
}
2020/9/28 13:02
加载中...