1202 数独游戏

#include<iostream>

using namespace std;

int a[9][9];

void search(int m);
int test(int x,int m);
void output();

int main()
{
	int i,j;
	char ch;
	for(i=0;i<9;i++)	//输入时不能直接输入,否则会将一个九位数读入
	{
		for(j=0;j<9;j++)
		{
			cin>>ch;
			a[i][j]=ch-'0';
		}
	}
	search(0);
}

void search(int m)
{
	int i;
	if(m==81)
	{
		output();
	}
	else
	{
		if(a[m/9][m%9]==0)	//判断此位置是否为零
		{
			for(i=1;i<=9;i++)
			{
				if(test(i,m))	//测试是否满足条件
				{
					a[m/9][m%9]=i; 
					search(m+1);
					a[m/9][m%9]=0;
				}
			}
		}
		else
		{	
			search(m+1);
		}
	}
}

int test(int x,int m)
{
	int i,j,flag=1,row,col;
	row=m/9;
	col=m%9;
	for(i=0;i<9;i++)	//判断每行是否有重复
	{
		if(i!=col&&x==a[row][i])
		{
			flag=0;
			break;
		}
	}
	for(i=0;i<9;i++)	//判断每列是否有重复
	{
		if(i!=row&&x==a[i][col]) 
		{
			flag=0;
			break;
			
		}
	}
	for(i=row/3*3;i<row/3*3+3;i++)	//判断每个小九宫格是否有重复
	{
		for(j=col/3*3;j<col/3*3+3;j++)
		{
			if((i!=row&&j!=col)&&a[i][j]==x)
			{
				flag=0;
				break;
			}
		}
	}
	return (flag);
}

void output()
{
	int i,j;
	for(i=0;i<9;i++)
	{
		for(j=0;j<9;j++)
		{
			cout<<a[i][j];
		}
		cout<<endl;
	}
}


数独游戏

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。

输入:

一个9*9的矩阵,0表示该位置是空白。

输出:

一个9*9的矩阵,格式与输入类似。

输入样例:

900050060 020070100 300102040 703800529 000345000 516009403 050208006 007090010 030010004

输出样例:

971453268 428976135 365182947 743861529 892345671 516729483 154238796 687594312 239617854


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值