首页 > 编程语言 >数独游戏c++

数独游戏c++

时间:2023-01-06 20:23:41浏览次数:41  
标签:11 lie 游戏 int hang c++ flag shuzi 数独

问题 I: 数独游戏
时间限制: 1.000 Sec 内存限制: 128 MB

题目描述
给你一个N×N的表格(3<N<10),在表格中事先已经填入了一部分的数字,现在请你的表格中空余的格子里填入1~N范围内的数字,使得整个表格的每一行和每一列都不存在重复的数字。

 

 

测试数据保证有解,若方案不止一个,只要输出第一行数字组成的数值最小的一个方案。

输入
4
3 0 0 2
0 2 0 4
2 0 0 0
0 0 2 1

输出
3 1 4 2
1 2 3 4
2 4 1 3
4 3 2 1

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int k;
bool flag_hang[11][11];
bool flag_lie[11][11];
int kg_hang[100],kg_lie[100];
int sudujz[11][11];
bool fanganchuxian;
void shuchu(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<sudujz[i][j]<<" ";
        }
        cout<<endl;
    }
}
void dfs(int m){
    if(fanganchuxian) return ;
    if(m==k+1){
        shuchu();
        fanganchuxian=true;
        return ;
    }
    int x=kg_hang[m],y=kg_lie[m];
    for(int d=1;d<=n;d++){
        if(!flag_hang[x][d]&&!flag_lie[y][d]){
            sudujz[x][y]=d;
            flag_hang[x][d]=1;
            flag_lie[y][d]=1;
            dfs(m+1);
            flag_hang[x][d]=0;flag_lie[y][d]=0;
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            int shuzi;
            cin>>shuzi;
            if(shuzi==0){
                k++;
                kg_hang[k]=i;
                kg_lie[k]=j;
            }
            else{
                flag_hang[i][shuzi]=1;
                flag_lie[j][shuzi]=1;
                sudujz[i][j]=shuzi;
            }
        }
    }
    dfs(1);
  return 0;
}

 

标签:11,lie,游戏,int,hang,c++,flag,shuzi,数独
From: https://www.cnblogs.com/bskys/p/17031512.html

相关文章

  • Dijkstra(迪杰斯特拉)算法C++实现&讲解
    Dijkstra迪杰斯特拉算法及C++实现Dijkstra算法是典型的最短路径路由算法,用来计算一个节点到其他所有节点的最短路径。算法的基本思想和流程是:1.初始化出发点到其它各点的......
  • 程序:三子棋游戏
    头文件game.h#define_CRT_SECURE_NO_WARNINGS//头文件#include<stdio.h>#include<stdlib.h>#include<time.h>//定义行列#defineROW3#defineCOL3//函数声明voidmenu(......
  • C++ 不知树系列之二叉堆排序(递归和非递归实现上沉、下沉算法)
    1.前言什么是二叉堆?二叉堆是有序的完全二叉树,在完全二叉树的基础上,二叉堆提供了有序性特征:二叉堆的根结点上的值是整个堆中的最小值或最大值。当根结点上的值......
  • bzip2 C/C++ 库bzlib.h使用案例:读取.bz2文件
    准备从网上下载bzip2库,我下载的是V1.0.8版本的。然后在C工程中添加一个筛选器(文件夹)名叫bzlib,然后把下载的库中的如下9个文件,添加到其中:代码主函数代码如下:#include......
  • C++可执行文件绝对路径获取与屏蔽VS安全检查
    :前言前几天写新项目需要用到程序所在绝对路径的时候,发现网上居然一点相关分享都没有。:_pgmptr翻箱倒柜找出了几本教程,发现了一个叫_pgmptr的东西。进去看了一下,在s......
  • 做游戏的盈利路径有很多
    本文首发于微信公众号【小蚂蚁教你做游戏】,欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。哈喽!大家好,我是小蚂蚁。好久不见,最近停更了挺长时间,主要是因......
  • C++ 文件读入速度测试
    在信息学竞赛中,输入数据规模可能会很大,这时候就需要注意文件读取的效率。本文在Linux环境下测试了C++几种常见读入方式的效率。1.系统环境ArchLinuxx86_64默认L......
  • C++中对句柄Handle的理解
    在C++的初学者中,很容易把句柄理解成指针,但其实,句柄并不是指针. 那么句柄是什么,一句话,句柄是资源(或项目)的唯一标识。我们需要搞清楚的是,句柄Handle到底是怎么来标识......
  • 【LeetCode2180】[Go/C++/C#/Ruby/Swift/Kotlin/Rust/PHP/TS/Racket/Dart/Java/Elixir
    [toc]题解地址https://leetcode.cn/problems/count-integers-with-even-digit-sum/solutions/2047123/by-yhm138_-w8co/lc2180代码//点击指定元素document.querySel......
  • 【C++高级编程】(四)设计可重用的代码
      4.1重用哲学  4.2如何设计可重用的代码  4.2.1使用抽象    4.2.2构建理想的重用代码   4.2.3 设计有用的接口    4.2.4协......