hdu 3111
来源:互联网 发布:java 异常 throws 编辑:程序博客网 时间:2024/06/06 03:34
搜索的数独题目 用Judge函数去判断是否满足条件 还有就是深搜的基本步骤就是
{
map[][]=i; // 赋值
dfs(k);// 继续搜索
if(ans) return ; //判断
map[][]=0; // 还原之前的内容
}
这道题在搜索时 ,如果遇到错误的值就会使用map[][]=0;全部回溯,将之前所有的错误数据全部还原
# include <stdio.h>char map[15][15];int vis[15][15];int x[150],y[150];int ans;int count;int Judge(int x,int y,int val){int i,j,a,b;for(i=0;i<9;i++)if(i!=x&&vis[i][y]==val)return 1;for(j=0;j<9;j++)if(j!=y&&vis[x][j]==val)return 1;for(a=0,i=x/3*3;a<3;a++,i++)for(b=0,j=y/3*3;b<3;b++,j++){if(i==x&&j==y)continue;if(vis[i][j]==val)return 1;}return 0;}void dfs(int k){int i;if(k>=count) ans=1;if(ans) return ;for(i=1;i<=9;i++){if(Judge(x[k],y[k],i)) continue;vis[x[k]][y[k]]=i;dfs(k+1);if(ans)return ;vis[x[k]][y[k]]=0;}return ;}int main (){int T,i,j;int mark=0,flag;scanf("%d",&T);while(T--){count=0;if(mark)scanf("%s",map[i]);for(i=0;i<9;i++)scanf("%s",map[i]);for(i=0;i<9;i++)for(j=0;j<9;j++)if(map[i][j]=='?'){vis[i][j]=0;x[count]=i;y[count]=j;count++;}elsevis[i][j]=map[i][j]-'0';flag=0;for(i=0;i<9;i++){for(j=0;j<9;j++)if(vis[i][j]&&Judge(i,j,vis[i][j])){flag=1;break;}if(flag)break;}ans=0;if(!flag){dfs(0);}if(mark)printf("---\n");if(ans){for(i=0;i<9;i++){for(j=0;j<9;j++){printf("%d",vis[i][j]);}printf("\n");}}elseprintf("impossible\n");mark=1;}return 0;}
- hdu 3111
- hdu 3111 Sudoku
- HDU 3111 Soduku [DFS]
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- nandflash启动设置环境变量导致不能启动
- 使用PowerDesigner画ER图详细教程
- eclipse下支持vc++编译环境
- 最短摘要的生成
- 修改Oracle默认的认证方式
- hdu 3111
- 为Servlet或普通Java程序注入Spring托管的Bean、数据源
- 【ProjectEuler】ProjectEuler_050(找到100万以内最多连续素数的和,它也同时是个素数)
- 两个半小时的 Perl 之旅
- JS实现标签页效果
- 进程的互斥与同步
- SPFA模板
- Android2.3开发环境搭建
- 基于tcp的简单socket通信