栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2918 Tudoku

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2918 Tudoku

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<cmath>#include<cstdlib>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;const int maxd=10+5;typedef long long ll;int dx[]= {0,0,1,-1};int dy[]= {1,-1,0,0};int mz[maxd][maxd],visr[maxd][maxd],visc[maxd][maxd],grid[maxd][maxd];char m[maxd][maxd];int row[maxd],col[maxd];void init(){    mem(visr,0),mem(visc,0),mem(grid,0);    mem(row,0),mem(col,0);    for(int i=0; i<9; ++i)    {        scanf("%s",m[i]);        for(int j=0; j<9; ++j)        { mz[i][j]=m[i][j]-'0'; visr[i][mz[i][j]]=1; visc[j][mz[i][j]]=1; if(mz[i][j]!=0) row[i]++,col[j]++; int tmp=i/3*3+j/3; grid[tmp][mz[i][j]]=1;        }    }    for(int i=0; i<9; ++i)        if(row[i]==8)        { int j; for(j=0; j<9; ++j)     if(mz[i][j]==0) break; for(int k=1; k<=9; ++k)     if(visr[i][k]==0)     {         mz[i][j]=k;         visr[i][k]=1;         visc[j][k]=1;         int tmp=i/3*3+j/3;         grid[tmp][k]=1;         break;     }        }    for(int j=0; j<9; ++j)        if(col[j]==8)        { int i; for(i=0; i<9; ++i)     if(mz[i][j]==0) break; for(int k=1; k<=9; ++k)     if(visc[j][k]==0)     {         mz[i][j]=k;         visc[j][k]=1;         visr[i][k]=1;         int tmp=i/3*3+j/3;         grid[tmp][k]=1;         break;     }        }}bool dfs(int x,int y){    // if(!setnum(x,y)) return;    if(x==9) return true;    bool flag=false;    if(mz[x][y]==0)    {        int tmp=x/3*3+y/3;        for(int i=1; i<=9; ++i) if(visr[x][i]==0 && visc[y][i]==0 && grid[tmp][i]==0) {     mz[x][y]=i;     visr[x][i]=1;     visc[y][i]=1;     grid[tmp][i]=1;     if(y==8)         flag=dfs(x+1,0);     else         flag=dfs(x,y+1);     if(flag) return true;     else     {         mz[x][y]=0;         visr[x][i]=0;         visc[y][i]=0;         grid[tmp][i]=0;     } }    }    else    {        if(y==8) flag=dfs(x+1,0);        else flag=dfs(x,y+1);        if(flag) return true;        else return false;    }    return false;}void print(int k){    printf("Scenario #%d:n",k);    for(int i=0; i<9; ++i)    {        for(int j=0; j<9; ++j) printf("%d",mz[i][j]);        printf("n");    }    printf("n");}int main(){    int kase;    scanf("%d",&kase);    for(int k=1; k<=kase; ++k)    {        init();        dfs(0,0);        print(k);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号