数独挑战

数独挑战

https://ac.nowcoder.com/acm/problem/24911

巧妙的三招

1.读入数据的时候直接记录第cnt个需要填充的数组元素的x、y坐标 space结构体元素

2.用已经填充了多少个数字dep,作为dfs搜索深度.




struct ty {
	int x, y;
}space[90];
int mp[12][12];

//判断第i行,是否存在已经有数字j了
int h[12][12], l[12][12], gogn[12][12];
int cnt = 0;


//打表,用以判断坐标x,y的点是在第几个九宫格里面,

const int g[10][10] = { {0,0,0,0,0,0,0,0,0,0},
					 {0,1,1,1,2,2,2,3,3,3},
					 {0,1,1,1,2,2,2,3,3,3},
					 {0,1,1,1,2,2,2,3,3,3},
					 {0,4,4,4,5,5,5,6,6,6},
					 {0,4,4,4,5,5,5,6,6,6},
					 {0,4,4,4,5,5,5,6,6,6},
					 {0,7,7,7,8,8,8,9,9,9},
					 {0,7,7,7,8,8,8,9,9,9},
					 {0,7,7,7,8,8,8,9,9,9}, };
void print() {
	for ( int i = 1; i < 10; i++ ) {
		for ( int j = 1; j < 10; j++ ) {
			cout << mp[i][j];
			if ( j == 9 )cout << '\n';
			else cout << " ";
		}
	}
}
void dfs(int dep) {
	if ( dep > cnt )
	{
		print();
		return;
	}
	for ( int i = 1; i < 10; i++ )
	{
// 		if ( !h[space[dep].x][i] && !l[space[dep].y][i] && !gogn[g[space[dep].x][space[dep].y]][i])
// 		{
// 			h[space[dep].x][i] = 1;
// 			l[space[dep].y][i] = 1;
// 			gogn[g[space[dep].x][space[dep].y]][i] = 1;
// 			mp[space[dep].x][space[dep].y] = i;
// 			dfs(dep + 1);	
// 			h[space[dep].x][i] = 0;
// 			l[space[dep].y][i] = 0;
// 			gogn[g[space[dep].x][space[dep].y]][i] = 0;
// 		}
         int xx=space[dep].x,yy=space[dep].y;
         if(h[xx][i]==0&&l[yy][i]==0&&gogn[g[xx][yy]][i]==0){
                h[xx][i]=1;
                l[yy][i]=1;
                gogn[g[xx][yy]][i]=1;
                mp[xx][yy]=i;
                dfs(dep+1);
                h[xx][i]=0;
                l[yy][i]=0;
                gogn[g[xx][yy]][i]=0;
                mp[xx][yy]=0;
            }        
	}
}
int main(int arg, char** argv) {
// 	ios::sync_with_stdio(false);
// 	cin.tie(nullptr);
// 	cin.tie(nullptr);
	for ( int i = 1; i <10; i++ )
	{
		for ( int j = 1; j < 10; j++ )
		{
			cin >> mp[i][j];
			if ( mp[i][j] == 0 )
			{
				space[++cnt].x = i;
				space[cnt].y = j;
			}else{
                h[i][mp[i][j]]=1;
                l[j][mp[i][j]]=1;
                gogn[g[i][j]][mp[i][j]]=1; 
            }
		}
	}
	dfs(1);
	return 0;
}


全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务