UEST OJ1222(DFS)

来源:互联网 发布:网络语打卡失败 编辑:程序博客网 时间:2024/06/05 11:28

南阳CCPC的H题,意思是给你一个4*4的数独要你填写完整,其中每行没列和每个4快都只有数字1-4。

数据很小暴力搞搞。

#include <bits/stdc++.h>using namespace std;#define maxn 11char mp[maxn][maxn];int cnt;struct node {    int x, y;}p[22];bool dfs (int pos) {    if (pos > cnt)        return 1;    int x = p[pos].x, y = p[pos].y;    bool vis[maxn];    memset (vis, 0, sizeof vis);    for (int i = 0; i < 4; i++) {        if (mp[x][i] != '*')            vis[mp[x][i]-'0'] = 1;        if (mp[i][y] != '*')            vis[mp[i][y]-'0'] = 1;    }    if (mp[x^1][y^1] != '*')        vis[mp[x^1][y^1]-'0'] = 1;    for (int i = 1; i <= 4; i++) {        if (!vis[i]) {            mp[x][y] = i+'0';            if (dfs (pos+1))                return 1;        }    }    mp[x][y] = '*';    return 0;}int main () {    //freopen ("in", "r", stdin);    ios::sync_with_stdio(0);    int t, kase = 0;    cin >> t;    while (t--) {        cnt = 0;        for (int i = 0; i < 4; i++) {            cin >> mp[i];        }        for (int i = 0; i < 4; i++) {            for (int j = 0; j < 4; j++) {                if (mp[i][j] == '*')                    p[++cnt].x = i, p[cnt].y = j;            }        }        dfs (1);        cout << "Case #" << ++kase << ":" << endl;        for (int i = 0; i < 4; i++) {            for (int j = 0; j < 4; j++) {                cout << mp[i][j];            }            cout <<endl;        }    }    return 0;}


0 0