为什么会报错呢
  • 板块P1784 数独
  • 楼主cbkxx
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/4/22 13:49
  • 上次更新2023/10/23 17:48:47
查看原帖
为什么会报错呢
705343
cbkxx楼主2023/4/22 13:49
#include<bits/stdc++.h>
using namespace std;
int a[10][10],sx,sy,cnt,h[10][10],l[10][10],g[10][10];
bool b;
void dfs(int x,int y,int g){
	if(b==1){
		return;
	}
	if(g==81){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=9;j++){
				cout<<a[i][j]<<" ";
			}
			cout<<endl;
		}
		b=1;
		return;
	}
	if(a[x][y]!=0){
		if(y!=9){
			dfs(x,y+1,g);
		}else{
			dfs(x+1,1,g);
		}
		return;
	}
	for(int i=1;i<=9;i++){
		if(h[x][i]==0&&l[y][i]==0){
			if(x>=1&&x<=3&&y>=1&&y<=3&&g[1][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=1&&x<=3&&y>=4&&y<=6&&g[2][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=1&&x<=3&&y>=7&&y<=9&&g[3][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=4&&x<=6&&y>=1&&y<=3&&g[4][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=4&&x<=6&&y>=4&&y<=6&&g[5][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=4&&x<=6&&y>=7&&y<=9&&g[6][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=7&&x<=9&&y>=1&&y<=3&&g[7][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}else if(x>=7&&x<=9&&y>=4&&y<=6&&g[8][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;	
			}else if(g[9][i]==0){
				a[x][y]=i;
				if(y!=9){
					dfs(x,y+1,g+1);
				}else{
					dfs(x+1,1,g+1);
				}
				a[x][y]=0;
			}
		}
	}
}
int main(){
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			cin>>a[i][j];
			if(a[i][j]==0){
				sx=i;
				sy=j;
			}else{
				cnt++;
				h[i][a[i][j]]=1;
				l[j][a[i][j]]=1;
				if(i>=1&&i<=3&&j>=1&&j<=3){
					g[1][a[i][j]]=1;
				}else if(i>=1&&i<=3&&j>=4&&j<=6){
					g[2][a[i][j]]=1;
				}else if(i>=1&&i<=3&&j>=7&&j<=9){
					g[3][a[i][j]]=1;
				}else if(i>=4&&i<=6&&j>=1&&j<=3){
					g[4][a[i][j]]=1;
				}else if(i>=4&&i<=6&&j>=4&&j<=6){
					g[5][a[i][j]]=1;
				}else if(i>=4&&i<=6&&j>=7&&j<=9){
					g[6][a[i][j]]=1;
				}else if(i>=7&&i<=9&&j>=1&&j<=3){
					g[7][a[i][j]]=1;
				}else if(i>=7&&i<=9&&j>=4&&j<=6){
					g[8][a[i][j]]=1;
				}else{
					g[9][a[i][j]]=1;
				}
			}
		} 
	}
	dfs(sx,sy,cnt);
	return 0;
}
2023/4/22 13:49
加载中...