- 在线时间
- 53 小时
- 最后登录
- 2016-4-10
- 注册时间
- 2010-10-12
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 80 点
- 威望
- 1 点
- 阅读权限
- 30
- 积分
- 131
- 相册
- 0
- 日志
- 0
- 记录
- 10
- 帖子
- 184
- 主题
- 2
- 精华
- 0
- 分享
- 0
- 好友
- 15
升级   15.5% TA的每日心情 | 开心 2014-11-18 08:28 |
---|
签到天数: 20 天 [LV.4]偶尔看看III
|
#include<stdio.h>
#include<stdlib.h>
int sd[81]={0};//存放数据,0表示代填数据
void search(int);
int checkrow(int,int);
int checkcol(int,int);
int checkgezi(int,int,int);
int panduan(int,int);
void print();
void main()
{
// int i;
// for(i=0;i<81;i++)//读入数据
// scanf("%d",&sd[i]);
printf("\n");
search(0);
}
void search(int m)
{
int i;
if(m>=81)//搜索完毕
{
print();
// exit(0);
printf("\n");
}
else if(sd[m]!=0)//当前位置已经填了数字
search(m+1);
else//对当前位置进行填数
{
for(i=1;i<=9;i++)//1~9一个一个的试探
{
if(panduan(m,i))
{
sd[m]=i;
search(m+1);
sd[m]=0;
}
}
}
}
int panduan(int m,int i)
{
int row,col;
int x,y,z;
row=m/9;//求行
col=m%9;//求列
x=checkrow(i,row);
y=checkcol(i,col);
z=checkgezi(i,row,col);
if(x==1&&y==1&&z==1)
return 1;
return 0;
}
int checkrow(int m,int x)//检查同行,x为行数
{
int i;
for(i=0;i<9;i++)
if(m==sd[x*9+i])
return 0;
return 1;
}
int checkcol(int m,int y)//检查同列,y为列数
{
int i;
for(i=0;i<9;i++)
if(m==sd[y+i*9])
return 0;
return 1;
}
int checkgezi(int m,int x,int y)//x是行号,y是列号
{
int checkxiaogezi(int qx,int zx,int qy,int zy,int m);
if(x>=0&&x<=2&&y>=0&&y<=2)//第一个小宫格
return checkxiaogezi(0,2,0,2,m);
if(x>=3&&x<=5&&y>=0&&y<=2)//第二个小宫格
return checkxiaogezi(3,5,0,2,m);
if(x>=6&&x<=8&&y>=0&&y<=2)//第三个小宫格
return checkxiaogezi(6,8,0,2,m);
if(x>=0&&x<=2&&y>=3&&y<=5)//第四个小宫格
return checkxiaogezi(0,2,3,5,m);
if(x>=3&&x<=5&&y>=3&&y<=5)//第五个小宫格
return checkxiaogezi(3,5,3,5,m);
if(x>=6&&x<=8&&y>=3&&y<=5)//第六个小宫格
return checkxiaogezi(6,8,3,5,m);
if(x>=0&&x<=2&&y>=6&&y<=8)//第七个小宫格
return checkxiaogezi(0,2,6,8,m);
if(x>=3&&x<=5&&y>=6&&y<=8)//第八个小宫格
return checkxiaogezi(3,5,6,8,m);
if(x>=6&&x<=8&&y>=6&&y<=8)//第九个小宫格
return checkxiaogezi(6,8,6,8,m);
}
void print()
{
int i;
for(i=0;i<81;i++)
{
printf("%d ",sd[i]);
if((i+1)%9==0)
printf("\n");
}
}
int checkxiaogezi(int qx,int zx,int qy,int zy,int m)
{
int i,j;
for(i=qx;i<=zx;i++)
for(j=qy;j<=zy;j++)
if(sd[i*9+j]==m)
return 0;
return 1;
}
|
-
总评分: 威望 + 1
查看全部评分
|