c++dfs解数独,哪位大佬指导下?
  • 板块灌水区
  • 楼主xiaoqinglang11
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/5/11 23:51
  • 上次更新2023/10/28 01:38:55
查看原帖
c++dfs解数独,哪位大佬指导下?
484439
xiaoqinglang11楼主2022/5/11 23:51

急!

万分感谢!

好人108生平安

#include<bits/stdc++.h>
#define N 9
using namespace std;
int a[10][10];
bool check(int ii,int jj,int num)
{
	for(int i=1;i<=N;i++)
		if(a[ii][i]==num||a[i][jj]==num)
			return false;
	int ti=ii%3==0?ii-2:(ii/3)*3+1;
	int tj=jj%3==0?jj-2:(jj/3)*3+1;
	for(int i=ti;i<=ti+2;i++)
		for(int j=tj;j<=tj+2;j++)
			if(a[i][j]==num)
				return false;
	return true;
}
void dfs(int ii,int jj)
{
	if(ii>N)
	{
		printf("Done!\n");
		for(int i=1;i<=N;i++)
		{
			for(int j=1;j<=N;j++)
				printf("%d ",a[i][j]);
			printf("\n");
		}
		printf("\n");
		return ;
	}
	if(a[ii][jj])
	{
		dfs(jj==N?ii+1:ii,jj==N?jj+1:1);
		return ;
	}
	for(int i=1;i<=N;i++)
		if(check(ii,jj,i))
		{
			a[ii][jj]=i;
			dfs(jj==N?ii+1:ii,jj==N?jj+1:1);
			a[ii][jj]=0;
		}
}
int main()
{
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
			scanf("%d",&a[i][j]);
	printf("Loading...\n\n");
	dfs(1,1);
	return 0;
}
2022/5/11 23:51
加载中...