zoukankan      html  css  js  c++  java
  • A bit of classic

    #include<bits/stdc++.h>
    
    const int INF  = 0x3f3f3f3f;
    const int Maxn = 255;
    
    #define ll long long
    #define mem(x,y) memset(x,y,sizeof(x))
    using namespace std;
    int mp[Maxn][Maxn], cnt = 0, flag = 0;
    int mx[8] = {2, 2, 1, 1, -2, -2, -1, -1}, my[8] = {1, -1, 2, -2, 1, -1, 2, -2};
    
    int door(int x, int y, int n) {  //  计算(x,y)下一步能跳的位置数
        int cnt = 0;
        for (int i = 0; i < 8; i++) {
            int a = x + mx[i], b = y + my[i];
            if (a >= 1 && a <= n && b >= 1 && b <= n && mp[a][b] == 0)
                cnt++;
        }
        return cnt;
    }
    void deal(int n) {
        if (n > 1 && n < 5) return;
        cnt = flag = 0;
    
        for (int tt = 1; tt <= 8; tt++)
            for (int xx = 1; xx <= 6; xx++) {
    
                int x = tt, y = xx;
                mem(mp, 0);
                for (cnt = 1; cnt <= n * n; cnt++) {
                    mp[x][y] = cnt;
                    if (cnt == n * n) {
                        flag = 1;
                        return;
                    }
                    if (door(x, y, n) == 0)
                        break;
                    int m = 10, a, b;
    
                    for (int i = 0; i < 8; i++) {  // 贪心
                        int p = x + mx[i], q = y + my[i];
                        if (!(p >= 1 && p <= n && q >= 1 && q <= n && mp[p][q] == 0)) continue;
                        int k = door(p, q, n);
                        if (k < m) {
                            m = k;
                            a = p, b = q;
                        }
    
                    }
                    x = a, y = b;
                }
    
            }
    }
    int main() {
        freopen("classic.in", "r", stdin);
        freopen("classic.out", "w", stdout);
        int N;
        while (cin >> N) {
            deal(N);
            if (flag == 0)
                printf("No solution.
    ");
            else {
                printf("There is solution:
    ");
                for (int i = 1; i <= N; i++)
                    for (int j = 1; j <= N; j++)
                        printf("%d%c", mp[i][j], j == N ? '
    ' : ' ');
            }
        }
    }
    

      

  • 相关阅读:
    函数
    文件
    字符编码
    卸载python
    mysql修改密码
    playbook
    expect无交互操作
    用户认证
    配置并访问NFS共享
    配置Multipath多路径环境
  • 原文地址:https://www.cnblogs.com/NWUACM/p/6863667.html
Copyright © 2011-2022 走看看