HDU 1426 数独

编程入门 行业动态 更新时间:2024-10-11 11:17:29

HDU 1426 <a href=https://www.elefans.com/category/jswz/34/1765909.html style=数独"/>

HDU 1426 数独

HDU 1426

/*************************************************************************> File Name: shudu.cpp> Author:yuan > Mail: > Created Time: 2014年11月06日 星期四 14时35分05秒************************************************************************/#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
const int MAX=9;
int mat[MAX][MAX],ans[MAX][MAX];
int flag[10];
char c;
bool mark;
bool can1(int k,int num)
{ int x=k/9;int y=k%9;for(int i=0;i<9;i++)if(ans[x][i]==num) return 0;return 1;
}
bool can2(int k,int num)
{int x=k/9;int y=k%9;for(int i=0;i<9;i++)if(ans[i][y]==num) return 0;return 1;
}
bool can3(int k,int num)
{int x=k/9;int y=k%9;int sx=x/3*3,sy=y/3*3;for(int i=sx;i<sx+3;i++)for(int j=sy;j<sy+3;j++)if(ans[i][j]==num) return 0;return 1;
}
void print()
{for(int i=0;i<9;i++)for(int j=0;j<9;j++){if(j==0) printf("%d",ans[i][j]);else printf(" %d",ans[i][j]);if(j==8) printf("\n");}
}void dfs(int k)
{   if(mark==1) return;if(k==81){mark=1;print();return;}int x=k/9;int y=k%9;if(mat[x][y]!=0) dfs(k+1);else for(int i=1;i<=9;i++){if(can1(k,i)&&can2(k,i)&&can3(k,i)){   ans[x][y]=i;dfs(k+1);ans[x][y]=0;}}
}
int main()
{  bool first=1;while(cin>>c){   if(c!='?') mat[0][0]=ans[0][0]=c-'0';else mat[0][0]=ans[0][0]=0;for(int i=0;i<9;i++)for(int j=0;j<9;j++){   if(i==0&&j==0) continue;cin>>c;if(c!='?') mat[i][j]=ans[i][j]=c-'0';else mat[i][j]=ans[i][j]=0;}if(first){first=0;}else printf("\n");mark=0;memset(flag,0,sizeof(flag));dfs(0);}return 0;
}


更多推荐

HDU 1426 数独

本文发布于:2024-03-10 10:50:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727775.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数独   HDU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!