小算法练习,Sudoku(POJ2676数字游戏
来源:互联网 发布:c 和c语言有什么区别 编辑:程序博客网 时间:2024/05/18 00:09
Sudoku(POJ2676)是一种简单的数字游戏,一个9×9的正方形表格被分成9个3×3的小正方形表格,在表格的某些单元格中,已填有数字1至9中的一个。游戏的任务是,在表格每一个空白单元格里填入数字1至9中的一个,使得9×9正方形表格的每一行和每一列以及9个3×3小正方形表格中,数字1至9都出现且仅出现一次。
你的任务是,编程求出给定Sudoku游戏的一种填法。
int array[9][9];
int num=0;
int pan(int i,int j,int t)
{
int a,b;
int i1,j1;
if(array[i][j]!=0)//原位置上有数
{
if(j==8&&i==8)
return 1;
if(j==8&&i<8)
{
for(a=1;a<=9;a++)
if(pan(i+1,0,a)==1)
return 1;
}
else
{
for(a=1;a<=9;a++)
if(pan(i,j+1,a)==1)
return 1;
}
}
else
{
for(a=0;a<9;a++)//看大行,大列中是否有数与t重合的
if(t==array[i][a]||t==array[a][j])
return 0;
//小矩阵中有没有与t重合的
{
i1=i/3;
i1=i1*3;
j1=j/3;
j1=j1*3;
for(a=i1;a<i1+3;a++)
for(b=j1;b<j1+3;b++)
{
if(array[a][b]==t)
return 0;
}
}
//t暂时可以添入该位置
array[i][j]=t;
if(j==8&&i==8)
return 1;//最后一个数了,成功添数
if(j==8&&i<8)
{
for(a=1;a<=9;a++)
if(pan(i+1,0,a)==1)
return 1;
if(a==10)
{
array[i][j]=0;
return 0;
}
}
else
{
for(a=1;a<=9;a++)
if(pan(i,j+1,a)==1)
return 1;
if(a==10)
{
array[i][j]=0;
return 0;
}
}
}
}
void main()
{
int i=0,j=0,t;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
array[i][j]=0;//初始化,全为0 ,此简化了,在原来方格中没有添数字
for(t=1;t<=9;t++)//添第一个数
if(pan(0,0,t)==1)
break;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
printf("%4d",array[i][j]);
printf("\n");
}
}
- 小算法练习,Sudoku(POJ2676数字游戏
- poj2676--Sudoku(搜索练习5-数独游戏)
- poj2676(Sudoku)
- poj2676 - Sudoku
- POJ2676--Sudoku
- poj2676 Sudoku
- poj2676 Sudoku
- POJ2676 Sudoku
- POJ2676 Sudoku
- poj2676 Sudoku
- poj2676 Sudoku
- POJ2676-Sudoku
- poj2676 Sudoku 数独
- 北大ACM poj2676 Sudoku
- POJ2676:Sudoku(DFS)
- POJ2676 Sudoku [数独]
- POJ2676:Sudoku(DFS)
- POJ2676 Sudoku DFS
- 转载_进程上下文和中断上下文
- 【Android】Droidparts的Unable to instantiate application错误
- (转)【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- servlet传送数据给jsp页面
- perl 中文手册 and blog
- 小算法练习,Sudoku(POJ2676数字游戏
- 高级的验证码识别软件都能对图片验证码进行识别
- ListCtrl自绘
- Android中ViewPager使用FragmentPagerAdapter(底部圆点)
- Sybase修改最大用户连接数
- 深度解析VC中的消息(下)
- 交互式shell和非交互式shell、登录shell和非登录shell的区别
- mysql5.6 主从复制事件校验 mysql Replication Event Checksum
- 磁盘fat转ntfs格式的dos命令