HDU 1476 Sudoku Killer

Sudoku Killer

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3367    Accepted Submission(s): 1063

Problem Description
自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视。 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品———HDU免费七日游外加lcy亲笔签名以及同hdu acm team合影留念的机会。 所以全球人民前仆后继,为了奖品日夜训练茶饭不思。当然也包括初学者linle,不过他太笨了又没有多少耐性,只能做做最最基本的数独题,不过他还是想得到那些奖品,你能帮帮他吗?你只要把答案告诉他就可以,不用教他是怎么做的。
数独游戏的规则是这样的:在一个9x9的方格中,你需要把数字1-9填写到空格当中,并且使方格的每一行和每一列中都包含1-9这九个数字。同时还要保证,空格中用粗线划分成9个3x3的方格也同时包含1-9这九个数字。比如有这样一个题,大家可以仔细观察一下,在这里面每行、每列,以及每个3x3的方格都包含1-9这九个数字。
例题:
Input
本题包含多组测试,每组之间由一个空行隔开。每组测试会给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开。其中1-9代表该位置的已经填好的数,问号(?)表示需要你填的数。
Output
对于每组测试,请输出它的解,同一行相邻的两个数用一个空格分开。两组解之间要一个空行。 对于每组测试数据保证它有且只有一个解。
Sample Input
7 1 2 ? 6 ? 3 5 8
? 6 5 2 ? 7 1 ? 4
? ? 8 5 1 3 6 7 2
9 2 4 ? 5 6 ? 3 7
5 ? 6 ? ? ? 2 4 1
1 ? 3 7 2 ? 9 ? 5
? ? 1 9 7 5 4 8 6
6 ? 7 8 3 ? 5 1 9
8 5 9 ? 4 ? ? 2 3
Sample Output
7 1 2 4 6 9 3 5 8
3 6 5 2 8 7 1 9 4
4 9 8 5 1 3 6 7 2
9 2 4 1 5 6 8 3 7
5 7 6 3 9 8 2 4 1
1 8 3 7 2 4 9 6 5
2 3 1 9 7 5 4 8 6
6 4 7 8 3 2 5 1 9
8 5 9 6 4 1 7 2 3
Author
linle
Source
ACM暑期集训队练习赛(三)
Recommend
LL
思路:DFS,这个题的输入输出格式要注意,好恶心的输出格式,PE无数次
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int map[10][10];
int hash[10][10][10];
int flag;
int ans;
int sum;
int str;
struct Node
{
    int x;
    int y;
};
Node empty[100];
bool judge(int step,int k)
{
    int x = empty[step].x;int y = empty[step].y;
    for(int i = 1;i <= 9;i ++)
        if(k == map[i][y])
            return false;
    for(int i = 1;i <= 9;i ++)
        if(k == map[x][i])
            return false;
    if(x <= 3)
    {
        if(y <= 3)
        {
            for(int i = 1;i <= 3;i ++)
                for(int j = 1;j <= 3;j ++)
                    if(map[i][j] == k)
                       return false;
        }
        if(y <= 6 && y > 3)
        {
            for(int i = 1;i <= 3;i ++)
               for(int j = 4;j <= 6;j ++)
                  if(map[i][j] == k)
                      return false;
        }
        if(y <= 9 && y > 6)
        {
            for(int i = 1;i <= 3;i ++)
               for(int j = 7;j <= 9;j ++)
                   if(map[i][j] == k)
                       return false;
        }
    }
    if(x > 3 && x <= 6)
    {
        if(y <= 3)
        {
            for(int i = 4;i <= 6;i ++)
                for(int j = 1;j <= 3;j ++)
                    if(map[i][j] == k)
                       return false;
        }
        if(y <= 6 && y > 3)
        {
            for(int i = 4;i <= 6;i ++)
               for(int j = 4;j <= 6;j ++)
                  if(map[i][j] == k)
                      return false;
        }
        if(y <= 9 && y > 6)
        {
            for(int i = 4;i <= 6;i ++)
               for(int j = 7;j <= 9;j ++)
                   if(map[i][j] == k)
                       return false;
        }
    }
    if(x > 6 && x <= 9)
    {
        if(y <= 3)
        {
            for(int i = 7;i <= 9;i ++)
                for(int j = 1;j <= 3;j ++)
                    if(map[i][j] == k)
                       return false;
        }
        if(y <= 6 && y > 3)
        {
            for(int i = 7;i <= 9;i ++)
               for(int j = 4;j <= 6;j ++)
                  if(map[i][j] == k)
                      return false;
        }
        if(y <= 9 && y > 6)
        {
            for(int i = 7;i <= 9;i ++)
               for(int j = 7;j <= 9;j ++)
                   if(map[i][j] == k)
                       return false;
        }
    }
    return true;;
}
void DFS(int step)
{
    if(sum + 1 == step)
    {
        flag = 1;
        return ;
    }
    for(int i = 1;i <= 9;i ++)
    {
        if(judge(step,i) == 1)
        {
            map[empty[step].x][empty[step].y] = i;
            DFS(step + 1);
            if(flag == 1)
                return ;
            map[empty[step].x][empty[step].y] = 0;
        }
    }
}
int main()
{
    int cnt = 0;
    while(~scanf(" %c",&str))
    {
        memset(hash,0,sizeof(hash));
        memset(map,0,sizeof(map));
        sum = 1;
        if(str == '?')
           {
               empty[sum].x = 1;empty[sum ++].y = 1;
           }
        else
           map[1][1] = str - 48;
        for(int i = 1;i <= 9;i ++)
           for(int j = 1;j <= 9;j ++)
               {
                   if(i == 1 && j == 1)
                       continue ;
                   scanf(" %c",&str);
                   if(str == '?')
                       {
                           empty[sum].x = i;empty[sum ++].y = j;
                       }
                   else
                       map[i][j] = str - 48;
               }
        sum --;
        flag = 0;
        DFS(1);
        if(cnt ++)
            printf("\n");
        for(int i = 1;i <= 9;i ++)
        {
           for(int j = 1;j < 9;j ++)
              printf("%d ",map[i][j]);
           printf("%d\n",map[i][9]);
        }
    }
    return 0;
}
#include<iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
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()
{
    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;
}

转载于:https://www.cnblogs.com/GODLIKEING/p/3330943.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java .net 互通redis_C# servicestack.redis 互通 java jedis

本文是基于jedis的一致性环哈希来修改的&#xff0c;.net选的是servicestack.redis组件来修改无奈两个组件都有各自的一致性环哈希算法&#xff0c;不兼容&#xff0c;那就选一个作为标准&#xff0c;修改另一个咯。本文选择jedis的一致性环哈希作为标准&#xff0c;进而修改.n…

6款帮助 滚动视差jquery插件

在网页设计中&#xff0c;视差滚动&#xff08;Parallax Scrolling&#xff09;是当下流行的网页设计技术&#xff0c;通过让多层背景以不同的速度或者不同的方向移动来形成非常有趣的 3D 运动效果。下面是一些运用视差滚动效果的优秀网页案例&#xff1a; 视差&#xff08;Pa…

EBS 多组织访问设置

如果想让你的职责下为单组织模式&#xff0c;那么你在Profile下只设置MO: Operating Unit的值&#xff0c;MO: Operating Unit提供只访问一个单独的OU。如果你想让你的职责下为多组织模式&#xff0c;你需要设置MO: Security Profile&#xff0c;MO: Security Profile提供多组织…

mysql 大量列 动态变量_aardio动态mysql变量设置

aardio动态mysql变量设置aardio动态mysql变量设置废话不多说&#xff0c;直接开始干活&#xff01;从上午度娘到现在&#xff01;终于有点结果&#xff01;需求是从数据库读取数据&#xff0c;根据条件(变量)直接上代码&#xff0c;如有任何问题&#xff0c;欢迎老铁指正&#…

制作简单的java应用程序_使用exe4j工具制作简单的java应用程序

首先需要下载exe4j工具并进行安装&#xff0c;下面是利用exe4j工具制作应用程序的步骤。1.首先将工程导出为可运行的jar包&#xff0c;选择extract required libralies into generated java&#xff0c;会将引用到的jar包也打到里面。右键java工程--export--java--runnable jar…

MVC的传递数据的方法

1、使用ViewBag 1 #region 0.2 Action方法 ActionResult Index2()2 /// <summary>3 /// Action方法4 /// </summary>5 /// <returns></returns>6 public ActionResult Index2()7 {8 …

java 找不到构造函数_JAVA找不到符号构造函数

JAVA找不到符号构造函数关注:52 答案:2 mip版解决时间 2021-02-05 09:13提问者彼岸独舞2021-02-05 00:06class Rect{private double length;private double width;public Rect(double length,double width){this.widthwidth;this.lengthlength;}public double getLength(){re…

SRF之数据访问

数据访问组件实现实体类和数据表映射、SQL语句配置执行、动态sql语句等功能&#xff0c;ORM方式能实现简单的对象和表的映射&#xff08;配置类似hibernate&#xff09;&#xff0c;但比较单一&#xff08;不支持一对多、多对多的情况&#xff09;&#xff0c;下边不做介绍&…

POJ 2054 Color a Tree

贪心。。。。 Color a TreeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6647 Accepted: 2249Description Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the "ro…

php xml 空格,php闭合标签输出多余空行使xml页面显示错误的处理

在PHP官方文档中&#xff0c;曾经指出最好不要再结尾添加?>结束标记。但我们编程的习惯和使用的IDE都会为我们自动建立php结束标记?>。这个标记使用在正常情况下是不影响程序的运行的。尤其在早期的php4中&#xff0c;这种标记使用不当也不会影响最后的输出。但我最近遇…

Oil Deposits

hdu1241:http://acm.hdu.edu.cn/showproblem.php?pid1241 题意&#xff1a;就是找出有多少块有石油的区域&#xff0c;就是数组中的,这边相邻指的是是周围的八个位置。 题解&#xff1a; dfs&#xff0c;从一块油田的位子开始&#xff0c;朝着与他相邻的8个方向收索&#xff…

java.io.FileNotFoundException:/mnt/sdcard/......(Permission denied)

今天在实现下载模块的时候&#xff0c;从服务器下载apk安装的时候总是不成功。 打开LogCat查看日志&#xff0c;发现在访问sdcard的时候出现Permission denied的情况。 百度之后发现原因是没有添加权限。 解决办法是在Manifest文件里添加&#xff1a; “<uses-permission an…

详解.NET IL代码(一)

本文主要介绍IL代码&#xff0c;内容大部分来自网上&#xff0c;进行整理合并的。 一、IL简介 为什么要了解IL代码&#xff1f; 如果想学好.NET&#xff0c;IL是必须的基础&#xff0c;IL代码是.NET运行的基础&#xff0c;当我们对运行结果有异议的时候&#xff0c;可以通过IL代…

CentOS yum安装mcrypt详细图解教程[linux]

在Linux的发行版CentOS 6.3 系统下&#xff0c;LAMP(LinuxApacheMysqlphp)环境搭建好后发现PHPMyadmin提示 “无法载入mcrypt模块” 的错误感觉很不爽&#xff0c;就尝试着使用yum安装提示找不到模块。如下为执行过程&#xff1a; [rootptr228 ~]# yum install php-mcrypt Sett…

[算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

上一篇的blog地址为&#xff1a;http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题&#xff0c;在最后的编程题中竟然出现了去哪儿网开发的第一题&#xff0c;也就是简化路径值。但是这次做题后&#xff0c;我发现我上次写的那个简化源码有很多问…

java封装264成flv,将H.264封装为FLV格式-Go语言中文社区

本文将介绍如何将H.264封装成flv格式。在看本文之间&#xff0c;建议先看一看下面两篇文章&#xff1a;首先说一说构建一个FLV文件需要什么&#xff1f;FLV Header FLv script tag FLV Video tag FLV Audio tag由于这里只是封装H.264&#xff0c;所以不包括Audio tag。下面将…

[转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.

解决&#xff1a; 应用程序池启动32位应用程序 设置托管管道为集成 &#xff08;仍然有问题&#xff09; 试试以下方法&#xff1a; http://phpwind.me/1222.html 楼主 发表于: 2011-11-26 图片:123.png 访问网站之前 应用程序池是开启的 访问后 网页报503 service unavailabl…

sublime php运行环境,sublime php 运行环境

sublime php 运行环境sublime php 运行环境有时候需要用运行一段 PHP 代码&#xff0c;比如测试某个函数返回值等等&#xff0c;如果启动Http Server&#xff0c;再打开浏览器&#xff0c;那黄花菜都凉了。我们可以在 Sublime Text 3 中创建 php 的 build system&#xff0c;这…

用Java写有关早上的语录,实用的适合早上发的早安问候语语录汇编39句

实用的适合早上发的早安问候语语录汇编39句不管梦想是什么&#xff0c;只有带着淡然的态度&#xff0c;做好当前的事情。早安&#xff01;下面是小编精心准备的适合早上发的早安问候语39句,欢迎大家前来欣赏。1、世上除了生死&#xff0c;其它都是小事。不管遇到了什么烦心事&a…

JQuery合并表格单元格

转&#xff1a;http://www.cnblogs.com/xuguoming/p/3412124.html JQuery合并表格单元格 一、需求 如果存在一个表格&#xff0c;想把其中某一列内容相同的部分合并单元格&#xff0c;用JQ动态如何操作&#xff0c;原始表格如下&#xff1a; 合并单元格之后的表格如下&#xff…