POJ 2676

来源:互联网 发布:originlab软件下载 编辑:程序博客网 时间:2024/06/18 11:12

http://poj.org/problem?id=2676

#include <cstdio>#include <iostream>#include <vector>#include <queue>#include <cstring>#include <map>using namespace std;typedef long long ll;int a[10][10];char ca[10][10];int flag;bool check(int x, int y){    for (int i = 0; i < 9; i++)    {        if (x != i && a[x][y] == a[i][y]) return false;        if (y != i && a[x][y] == a[x][i]) return false;    }    int xx = x/3*3;    int yy = y/3*3;    for (int i = xx; i < xx+3; i++)    {        for (int j = yy; j < yy+3; j++)        {            if (i != x && j != y && a[x][y] == a[i][j]) return false;        }    }    return true;}void dfs(int k){    if (k == 81)    {        for (int i = 0; i < 9; i++)        {            for (int j = 0; j < 9; j++)            {                printf("%d", a[i][j]);            }            printf("\n");        }        flag = 1;        return;    }    int x = k/9;    int y = k%9;    if (!a[x][y])    {        for (int i = 1; i <= 9; i++)        {            a[x][y] = i;            if (check(x, y))            {                dfs(k+1);            }            if (flag) return;            a[x][y] = 0;        }    }    else    {        dfs(k+1);        if (flag) return;    }}void record(int row, string val){    for (int i = 0; i < 9; i++)    {        a[row][i] = val[i]-'0';    }   }int main(){    int T;    string val;    scanf("%d", &T);    while (T--)    {        memset(a, 0, sizeof(a));        for (int i = 0; i < 9; i++)        {            cin >> val;            record(i, val);        }        flag = 0;        dfs(0);        //注意最后如果还是没有找到,就输出原来的。        if (!flag)        {            for (int i = 0; i < 9; i++)            {                for (int j = 0; j < 9; j++)                {                    printf("%d", a[i][j]);                }                printf("\n");            }        }    }    return 0;}
0 0
原创粉丝点击