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;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· 万字长文详解Text-to-SQL
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!