n维超立方体

n维超立方体

题目

题目:n维超立方体是在n维空间中对三维空间立方体的类比,下图便是一个4维超立方体在三维空间中的投影及该立方体在三维空间的展开图

四维超立方体及其展开图

给超立方体的各顶点编号后,就可以按照一定规则写出其邻接矩阵。请同学们根据下图寻找规律,对于给定的顶点编号序列,写出对应的超立方体的邻接矩阵。

低维立方体示意图

输入:

维数n,顶点的编号序列a(0<=n<=7)

输出:

对应的超立方体的邻接矩阵(顶点顺序需与a一致)

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 2↵
  2. 0 1 2 3↵
以文本方式显示
  1. 0 1 1 0↵
  2. 1 0 0 1↵
  3. 1 0 0 1↵
  4. 0 1 1 0↵
1秒64M0

代码

#include<stdio.h>
#include<math.h>
#include<string.h>
#define reversebit(x,y)  x^=(1<<y)

int n;
int num;
int a[10000]; //记录输出顺序
int ex[10000]; //记录每行输出
int k;

int main()
{
    int i,j;
    scanf("%d",&n);
    num=pow(2,n);
    for(i=0;i<num;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<num;i++)
    {
        memset(ex, 0, sizeof(ex));
        k=a[i];
        for(j=0;j<n;j++)
        {
        	int f=k;
            ex[reversebit(f,j)]=1;
        }
        printf("%d",ex[a[0]]);
        for(j=1;j<num;j++)
        {
            printf(" %d",ex[a[j]]);
        }
        printf("\n");
    }
}
以下是一个简单的超立方体的 manim 代码示例: ```python from manimlib.imports import * class HyperCube(Scene): def construct(self): # 定义超立方体的节点和它们的坐标 corners = [ np.array([1, 1, 1, 1]), np.array([1, 1, -1, 1]), np.array([1, -1, -1, 1]), np.array([1, -1, 1, 1]), np.array([-1, 1, 1, 1]), np.array([-1, 1, -1, 1]), np.array([-1, -1, -1, 1]), np.array([-1, -1, 1, 1]), np.array([1, 1, 1, -1]), np.array([1, 1, -1, -1]), np.array([1, -1, -1, -1]), np.array([1, -1, 1, -1]), np.array([-1, 1, 1, -1]), np.array([-1, 1, -1, -1]), np.array([-1, -1, -1, -1]), np.array([-1, -1, 1, -1]) ] corner_labels = [TexMobject(str(i+1)).move_to(c + 0.3 * normalize(c)) for i, c in enumerate(corners)] for i in range(len(corner_labels)): corner_labels[i].set_color(WHITE) # 连接超立方体的各个节点 edges = [] for i in range(4): for j in range(4): if i == j: continue edge = Line(corners[i], corners[j], color=WHITE) edges.append(edge) for i in range(4): for j in range(4, 8): edge = Line(corners[i], corners[j], color=WHITE) edges.append(edge) for i in range(8): for j in range(i+1, 8): if bin(i^j).count('1') == 1: edge = Line(corners[i], corners[j], color=WHITE) edges.append(edge) hypercube = VGroup(*edges) self.play(ShowCreation(hypercube)) self.wait() corner_labels = VGroup(*corner_labels) self.play(Write(corner_labels)) self.wait() ``` 这个代码会创建一个超立方体,然后在上面添加节点标签并播放动画。储存在 `corners` 中的顶点会在创建 `edges` 时连接成边。为了简述起见,这里没有添加变形动画,但可以使用 `self.play(Transform(start, end))` 来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值