您的位置:首页 > 产品设计 > UI/UE

UEST OJ1222(DFS)

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

数据很小暴力搞搞。

#include <bits/stdc++.h>
using namespace std;
#define maxn 11

char 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: