繁琐的输入

Posted emcikem

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了繁琐的输入相关的知识,希望对你有一定的参考价值。

一道简单的模板题,用dfs去实现数独的填空
但是输入十分地麻烦

传送门
首先他没有告诉你到底有几组数据,9*9的元素并非都是数字,有一个?代表空
而且每行的两个相邻元素之间有一个空格,所以用while(~scanf())又不能行得通

基本核心代码已给出,修改输入部分

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=10;
int G[N][N];

//对于01两种状态的,建议使用bool数据类型,因为bool只有一位,而int又4位,浪费空间
bool hang[N][N],lie[N][N],dyg[N][N],flag;//hang[i][x]表示第i行数字x是否用过,lie[j][x]表示第j列数字x是否用过,dyg[k][x]表示9个3*3的单元格里第k个单元格是否用过
void print()
    for(int i=0;i<9;i++)
        printf("%d",G[i][0]);
        for(int j=1;j<9;j++)
            printf(" %d",G[i][j]);
        
        putchar('\n');
    

void dfs(int x,int y)
    if(flag)return;//针对循环过程会输出多个数独表和多循环
    if(x==9)//全部都搜索完了
        flag=1;
        print();
        return;
    else//继续搜索
        if(G[x][y])//该位置不需要填数字
            if(y<8)dfs(x,y+1);//向右
            else dfs(x+1,0);//一行已经都搜过了,进行下一行搜索
        else//该位置需要填数字
            for(int i=1;i<=9;i++)
                if(!hang[x][i]&&!lie[y][i]&&!dyg[x/3*3+y/3][i])//如果i这个数字
                    G[x][y]=i;//保存搜到的数
                    hang[x][i]=lie[y][i]=dyg[x/3*3+y/3][i]=true;//标记
                    if(y<8)dfs(x,y+1);
                    else dfs(x+1,0);
                    G[x][y]=0;//回溯
                    hang[x][i]=lie[y][i]=dyg[x/3*3+y/3][i]=false;
                
            
        
    


int main()
    int t;
    cin>>t;
    while(t--)
        memset(hang,false,sizeof(hang));
        memset(lie,false,sizeof(lie));
        memset(dyg,false,sizeof(dyg));
        flag=0;
        for(int i=0;i<9;i++)
            for(int j=0;j<9;j++)
                char s[5];
                scanf("%s",s);
                if(s[0]=='?')G[i][j]=0;
                else G[i][j]=s[0]-'0';
                if(G[i][j]!=0)
                    int v=G[i][j];
                    hang[i][v]=true;
                    lie[j][v]=true;
                    dyg[i/3*3+j/3][v]=true;//分成了9个单元格
                
            
        
        dfs(0,0);//从第1行第一列开始搜索
    
    return 0;

以上是关于繁琐的输入的主要内容,如果未能解决你的问题,请参考以下文章

1052 卖个萌( ( ఠൠఠ )ノ繁琐的数据读取!!)

微信小程序 - 按钮文本框 “giao-text”

AForm

正则限制输入为数字,且最多输入2位小数 之 新写法

处理用户输入数据验证的更有效方法?

element-ui禁止用户输入空格