dfs 无法结束,求调
查看原帖
dfs 无法结束,求调
505417
H2ptimize_AFO楼主2023/4/30 19:51

rt

样例 dfs 至第 40 个空格左右时无法继续

#include<bits/stdc++.h>
using namespace std;

int G[15][15],cnt,cur[15][15];

void dfs(int dep)
{
	if(dep>cnt)
	{
		for(int i=1;i<=9;i++)
		{
			for(int j=1;j<=9;j++)cout<<cur[i][j]<<' ';
			cout<<'\n';
		}
		exit(0);
	}
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=9;j++)
		{
			if(!cur[i][j])
			{
				bool used[15]={};
				for(int k=1;k<=9;k++)used[cur[k][j]]=used[cur[i][k]]=true;
				for(int k=(i-1)/3*3+1;k<=(i-1)/3*3+3;k++)
				{
					for(int l=(j-1)/3*3+1;l<=(j-1)/3*3+3;l++)used[cur[k][l]]=true;
				}
				bool flag=false;
				for(int k=1;k<=9;k++)
				{
					if(!used[k])
					{
//						printf("%d: (%d, %d), %d\n",dep,i,j,k);
						cur[i][j]=k;
						used[k]=true;
						dfs(dep+1);
						cur[i][j]=0;
						flag=true;
					}
				}
				if(!flag)return;
			}
		}
	}
}

int main()
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=9;j++)
		{
			cin>>G[i][j];
			if(!G[i][j])cnt++;
			cur[i][j]=G[i][j];
		}
	}
	dfs(1);
	return 0;
}
2023/4/30 19:51
加载中...