zoukankan      html  css  js  c++  java
  • ACM-奇特的立方体

    题目描述:奇特的立方体
    任意给出8个整数,将这8个整数分别放在一个立方体的八个顶点上,要求检验每个面上的四个数之和相等这个条件能否被满足。

    输入

    一次输入8个整数
    

    输出

    YES或者NO
    YES表示可能构成满足条件的立方体
    NO则表示不能
    

    样例输入

    1 2 3 4 5 6 7 8

    样例输出

    YES


    思路:标记8个顶点的位置,构建子空间树即可。重点是计算每个面的顶点和!!!!!

    // 奇特的立方体.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int MAX = 100;
    int n = 8, flag, arr[MAX]/*8个数字*/, vis[MAX]/*8个位置是否放了*/,map[MAX]/*每个位置上方的数字*/;
    
    void printa()
    {
        for (int i = 0; i < n; i++) cout << map[i] << " ";
        cout << endl;
    }
    
    int check()
    {
        //printa();
        int s[6] = { 0 };
        s[0] = map[0] + map[1] + map[2] + map[3];
        s[1] = map[4] + map[5] + map[6] + map[7];
        s[2] = map[0] + map[1] + map[4] + map[5];
        s[3] = map[2] + map[3] + map[6] + map[7];
        s[4] = map[0] + map[3] + map[4] + map[7];
        s[5] = map[1] + map[2] + map[5] + map[6];
    
        for (int i = 1; i < 6; i++)
        {
            if (s[i - 1] != s[i]) return 0;
        }
    
        //cout << "sum:" << s[0] << endl;
        return 1;
    }
    
    
    void DFS(int pos)
    {
        //cout << "pos:" << pos << endl;
        if (flag) return;
        if (pos >= n)
        {
            if (check()) { flag = 1;}
            return;
        }
    
    
        for (int i = 0; i < n; i++)
        {
            if (!vis[i])
            {
                vis[i] = 1;
                map[i] = arr[pos];
                DFS(pos+1);
    
                vis[i] = 0;
                map[i] = 0;
            }
        }
    
    }
    
    int main()
    {
        for (int i = 0; i < n; i++) cin >> arr[i];
    
        flag = 0;
        memset(vis, 0, sizeof(vis));
        memset(map, 0, sizeof(map));
    
        DFS(0);
    
        if (flag) cout << "YES" << endl;
        else cout << "NO" << endl;
    
        return 0;
    }




  • 相关阅读:
    Java web项目部署之SecureCRT+SecureFX的简单使用
    Ubuntu Linux系统用命令安装MySQL数据库
    Linux中操作tomcat的一些命令
    学习Java第二天
    学Java第一天
    在Windows10下在WSL中使用visual studio code
    Makefile中的变量赋值
    我见过的最好的关于typedef函数指针声明的解说
    C语言中打印格式
    Vim常用小操作【持续更新】
  • 原文地址:https://www.cnblogs.com/x739400043/p/8537572.html
Copyright © 2011-2022 走看看