poj 2676 Sudoku(DFS+回溯+剪枝)
2676 -- Sudoku (poj.org)
#include<iostream> #include<cstring> using namespace std; int n,map[10][10]; bool row[10][10],col[10][10],grid[10][10]; bool DFS(int r,int c){ if(r==10) return true; bool flag=false; if(map[r][c]){ if(c==9) flag=DFS(r+1,1); else flag=DFS(r,c+1); return flag; }else{ int k=((r-1)/3)*3+(c-1)/3+1; for(int i=1;i<=9;i++){ if(!row[r][i]&&!col[c][i]&&!grid[k][i]){ map[r][c]=i; row[r][i]=true; col[c][i]=true; grid[k][i]=true; if(c==9) flag=DFS(r+1,1); else flag=DFS(r,c+1); if(!flag){ map[r][c]=0; row[r][i]=false; col[c][i]=false; grid[k][i]=false; }else return flag; } } } return false; } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n; while(n--){ memset(row,0,sizeof(row)); memset(col,0,sizeof(col)); memset(grid,0,sizeof(grid)); for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ char ch; cin>>ch; map[i][j]=ch-'0'; if(map[i][j]){ row[i][map[i][j]]=true; col[j][map[i][j]]=true; int k=((i-1)/3)*3+(j-1)/3+1; grid[k][map[i][j]]=true; } } } DFS(1,1); for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ cout<<map[i][j]; } cout<<endl; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)