60pts求助
  • 板块P1784 数独
  • 楼主lxc129
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/9 22:21
  • 上次更新2024/11/10 09:42:01
查看原帖
60pts求助
1126733
lxc129楼主2024/11/9 22:21
#include<bits/stdc++.h>    
using namespace std;
typedef long long ll;
ll a[11][11],vis[11][11],vis2[11][11],vis3[11][11];
void dfs(ll x,ll y){
	if (a[x][y]!=0){
		if (x==9 && y==9){
			for (ll i=1;i<=9;i++){
				for (ll j=1;j<=9;j++) cout<<a[i][j]<<' ';
				cout<<'\n';
			}
			exit(0);
		}
		else if (y<9) dfs(x,y+1);
		else dfs(x+1,1);
	}
	else{
	for (ll i=1;i<=9;i++)
	if (!vis[(x-1)/3*3+(y-1)/3+1][i] && !vis2[x][i] && !vis3[y][i]){
		a[x][y]=i;
		vis[(x-1)/3*3+(y-1)/3+1][i]=vis2[x][i]=vis3[y][i]=1;
		if (y<9) dfs(x,y+1);
		else dfs(x+1,1);
		a[x][y]=vis[(x-1)/3*3+(y-1)/3+1][i]=vis2[x][i]=vis3[y][i]=0;
	}
	}
}
int main(){
	for (ll i=1;i<=9;i++)
	for (ll j=1;j<=9;j++){
		cin>>a[i][j];
		if (a[i][j]!=0) vis[(i-1)/3*3+(j-1)/3+1][a[i][j]]=vis2[i][a[i][j]]=vis3[j][a[i][j]]=1;
	}
	dfs(1,1);
}
2024/11/9 22:21
加载中...