求助,第四个点tle
  • 板块P1784 数独
  • 楼主hang09
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/8/17 19:37
  • 上次更新2023/10/27 14:54:46
查看原帖
求助,第四个点tle
547002
hang09楼主2022/8/17 19:37
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int a[10][10];
bool h[10][10],w[10][10],g[10][10];

void dfs(int p)
{
	int x = p / 9;
	int y = p % 9;
	int k = x / 3 * 3 + y / 3;
	if(p > 80)
	{
		for(int i = 0; i <= 8; i ++)
		{
			for(int j = 0; j <= 8; j++)
			{
				cout << a[i][j] << " ";
			}
			cout << endl;
		}
		cout << endl;
		return;
	}
	if(a[x][y] != 0)
	{
		dfs(p + 1);
		return;
	}
	for(int i = 1; i <= 9; i++)
	{
		if(h[x][i] || w[y][i] || g[k][i])continue;
		a[x][y] = i;
		h[x][i] = w[y][i] = g[k][i] = 1;
		dfs(p + 1);
		a[x][y] = 0;
		h[x][i] = w[y][i] = g[k][i] = 0;
		
	}
}

int main()
{
	for(int i = 0; i <= 8; i++)
	{
		for(int j = 0; j <= 8; j++)
		{
			cin >> a[i][j];
			h[i][a[i][j]] = 1;
			w[j][a[i][j]] = 1;
			g[i / 3 * 3 + j / 3][a[i][j]] = 1;
		}
	}
	dfs(0);
	return 0;
}
2022/8/17 19:37
加载中...