26Sudoku Killer
来源:互联网 发布:国家统计局数据平台 编辑:程序博客网 时间:2024/05/22 23:53
简单题意
数独游戏,给出个数独,填充完整数独
解题思路形成过程
和老师上课讲的例题差不多,不过这个题使用?来代替未填数的位置,只要改一下就好了。记录所有?位置,判断当前空位置是否可以填某个数,然后直接DFS。
感想
做了好几遍才输出正确结果。。累。
AC代码
#include<iostream>
#include<fstream>
using namespace std;
struct point{
int x,y;
}pur[100];
int map[10][10],flag,num;
int check(int k,int cur){
int i,j,x,y;
for(i=0;i<9;i++)
if(map[pur[cur].x][i]==k||map[i][pur[cur].y]==k)return 0;
x=(pur[cur].x/3)*3;
y=(pur[cur].y/3)*3;
for(i=x;i<x+3;i++)
for(j=y;j<y+3;j++)
if(map[i][j]==k)return 0;
return 1;
}
void DFS(int step){
int i,j;
if(step==num){
for(i=0;i<9;i++){
for(j=0;j<8;j++)
printf("%d ",map[i][j]);
printf("%d\n",map[i][8]);
}
flag=1;
return;
}else{
for(i=1;i<=9;i++){
if(check(i,step)&&!flag){
map[pur[step].x][pur[step].y]=i;
DFS(step+1);
map[pur[step].x][pur[step].y]=0;
}
}
}
return;
}
int main(){
ifstream cin("in.txt");
freopen("in.txt","r",stdin);
int i,j,cas=0;
char s[3];
while(scanf("%s",s)!=EOF){
num=0;
if(s[0]=='?'){pur[num].x=0;pur[num].y=0;num++;map[0][0]=0;}
else map[0][0]=s[0]-'0';
for(i=0;i<9;i++)
for(j=0;j<9;j++){
if(i==0&&j==0)continue;
scanf("%s",s);
if(s[0]=='?'){pur[num].x=i;pur[num].y=j;num++;map[i][j]=0;}
else map[i][j]=s[0]-'0';
}
flag=0;
if(cas++)printf("\n");
DFS(0);
}
return 0;
}
- 26Sudoku Killer
- Sudoku Killer
- Sudoku Killer
- Sudoku Killer
- Sudoku Killer
- Sudoku Killer
- Sudoku Killer
- SDAU 搜索专题 26 Sudoku Killer
- HDU 1426 Sudoku Killer
- HDU 1426 Sudoku Killer
- hdu1426 Sudoku Killer 深搜
- hdu1426 Sudoku Killer
- hdu 1426 Sudoku Killer
- HDU 1426 Sudoku Killer
- HDU 1426 Sudoku Killer
- hdu1426 Sudoku Killer dfs
- HDU Sudoku Killer
- HDU1426 Sudoku Killer
- R 中这些常用的包你知道多少?
- hdu——1686Oulipo(kmp)
- Eclipse中配置Tomcat
- Andriod小项目——在线音乐播放器
- 【时间管理】两个故事理解时间管理的必要
- 26Sudoku Killer
- hrbust/哈理工oj Contest Print Server【模拟】
- 《浣溪沙》
- 1018
- ZOJ 3333(L)模拟
- C++学习笔记十六 - 文本处理string.H 类的用法,
- Java面试必备--转载留用
- 变态跳台阶
- 配置Nginx多核CPU,worker_cpu_affinity使用方法和范例