代 码 灵 异 事 件
  • 板块灌水区
  • 楼主CuSO4_and_5H2O
  • 当前回复9
  • 已保存回复9
  • 发布时间2022/6/22 10:38
  • 上次更新2023/10/27 22:50:43
查看原帖
代 码 灵 异 事 件
231946
CuSO4_and_5H2O楼主2022/6/22 10:38
#include<bits/stdc++.h>
#define int long long
using namespace std;

int Map[10][10];
struct node{
	int tong[10];
}t[10][10];
int zb[90][3],jzb,flag;

void wuy(int xx,int yy,int c)
{
	int x=(xx/3)*3+1,y=(yy/3)*3+1;
	t[x][y].tong[c]++;
	t[x][y+2].tong[c]++;
	t[x+2][y].tong[c]++;
	t[x+2][y+2].tong[c]++;
	for(int i=1;i<=9;i++)
		t[i][yy].tong[c]++,t[xx][i].tong[c]++;
	t[xx][yy].tong[c]--;
}

void wuy2(int xx,int yy,int c)
{
	int x=(xx/3)*3+1,y=(yy/3)*3+1;
	t[x][y].tong[c]--;
	t[x][y+2].tong[c]--;
	t[x+2][y].tong[c]--;
	t[x+2][y+2].tong[c]--;
	for(int i=1;i<=9;i++)
		t[i][yy].tong[c]--,t[xx][i].tong[c]--;
	t[xx][yy].tong[c]++;
}

void dfs(int k,int x,int y)
{
	for(int i=1;i<=9;i++)
	{
		if(t[x][y].tong[i]==0)
		{
			wuy(x,y,i);
			Map[x][y]=i;
			if(k==jzb)
			{
				flag=1;
				return ;	
			}
			dfs(k+1,zb[k+1][1],zb[k+1][2]); 
			if(flag==1) return ;
			wuy2(x,y,i);
		}
		
	}
}

signed main(){
	for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) cin>>Map[i][j];
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=9;j++)
		{
			if(Map[i][j]==0)
			{
				jzb++;
				zb[jzb][1]=i,zb[jzb][2]=j;
				cout<<jzb<<' '<<zb[2][2]<<endl;
				//cout<<i<<' '<<j<<' '<<zb[jzb][1]<<' '<<zb[jzb][2]<<endl;
				continue ;
			}
			else
				wuy(i,j,Map[i][j]);
		}
	}
	dfs(1,zb[1][1],zb[1][2]);
	for(int i=1;i<=9;i++) 
	{
	for(int j=1;j<=9;j++) cout<<Map[i][j]<<' ';
	cout<<endl;
	}
}

输入

8 0 0 0 0 0 0 0 0 
0 0 3 6 0 0 0 0 0 
0 7 0 0 9 0 2 0 0 
0 5 0 0 0 7 0 0 0 
0 0 0 0 4 5 7 0 0 
0 0 0 1 0 0 0 3 0 
0 0 1 0 0 0 0 6 8 
0 0 8 5 0 0 0 1 0 
0 9 0 0 0 0 4 0 0

之后为什么zb[2][2]的值会在jzb==48的时候变成4,我没有对zb数组还有什么多余的操作啊! 题目在这

2022/6/22 10:38
加载中...