SW练习_ADV_excel_BFS

这篇博客探讨了一个在SW练习中遇到的重复题目,该题目涉及使用宽度优先搜索(BFS)来解决Excel相关的问题。作者指出,相同的题目被提出两次,引发了一些讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

真能扯啊,同样的题目出了两遍。

package info.frady.adv;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

/**
 2
 10 9
 1 6
 1 9
 7 10
 7 5
 10 8
 6 2
 9 2
 2 4
 2 5
 10 8
 1 2
 1 9
 7 10
 7 5
 10 8
 6 2
 9 2
 2 4

 #1 5
 #2 3
 */
public class Excel {
    static NodeExcel2[] nodes;
    static boolean[] marked;
    public static void main(String[] args) throws Exception{

        System.setIn(new FileInputStream("C:\\Users\\86153\\Desktop\\SW\\excel\\系统判分用测试用例.txt"));
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(reader.readLine());
        int T=Integer.parseInt(st.nextToken());//测试用例的个数
        for (int i = 0; i <T ; i++) {
            st=new StringTokenizer(reader.readLine());
            int N=Integer.parseInt(st.nextToken());//N个点
            int M=Integer.parseInt(st.nextToken());//M次关联
            int C=Integer.parseInt(st.nextToken());//M次关联
            nodes=new NodeExcel2[N+1];
            marked=new boolean[N+1];
            for (int j = 0; j <nodes.length ; j++) {
                nodes[j]=new NodeExcel2(j);
            }
            for (int j = 0; j <M ; j++) {
                st=new StringTokenizer(reader.readLine());
                int start=Integer.parseInt(st.nextToken());
                int end=Integer.parseInt(st.nextToken());
                nodes[start].sonList.add(end);

                //System.out.println(Arrays.toString(pid));
            }
            int count=0;
            for (int j = 0; j <C ; j++) {
                st=new StringTokenizer(reader.readLine());
                int qq=Integer.parseInt(st.nextToken());
                //count=count+processBFS(qq);
                processBFS(qq);
            }
            for (int j = 1; j <marked.length ; j++) {
                if(marked[j]){
                    count++;
                }
            }

            System.out.printf("#%d %d\n",(i+1),count);

        }
        reader.close();
    }
    public static int processBFS(int start){
        LinkedList<Integer> list=new LinkedList<>();
        list.add(start);
        int count=0;
        while(!list.isEmpty()){
            int index=list.pop();
            marked[index]=true;
            //if(index!=start){
                count++;
           // }
            for (int sindex:nodes[index].sonList) {
                list.add(sindex);
            }
        }
        return count;

    }


}

class NodeExcel{
    int index;
    List<Integer> sonList;
    public NodeExcel(int index){
        this.index=index;
        this.sonList=new ArrayList<>();
    }
}

 

### Vivado FPGA 中 MMCME2_ADV 的配置与使用 #### 1. **MMCME2_ADV 基本概述** MMCME2_ADV 是 Xilinx 7 系列 FPGA 中的一个高级时钟管理模块 (Clock Management Tile, CMT),用于提供灵活的时钟频率合成、相位偏移以及动态重新配置功能。该模块可以生成多个独立的输出时钟,支持多种复杂的时钟树设计需求。 在 Vivado 工具中,可以通过 IP 核或者手动实例化原语的方式来实现 MMCME2_ADV 的配置[^1]。 --- #### 2. **通过 IP 核配置 MMCME2_ADV** Vivado 提供了一个名为 `Clocking Wizard` 的 IP 核工具,能够简化复杂时钟结构的设计过程。以下是其主要特点: - 支持静态和动态调整时钟频率。 - 自动生成必要的约束文件及时序报告。 - 用户界面友好,适合初学者快速上手。 具体操作流程如下: 1. 打开 Vivado 并创建一个新的项目或打开现有项目。 2. 在 IP Catalog 中搜索并添加 `Clocking Wizard` IP 核。 3. 设置输入时钟源(如 IBUFGDS 或其他单端时钟),并通过 GUI 调整目标输出时钟频率和其他参数。 4. 导出生成的 Verilog/VHDL 文件到工程目录下。 这种方法的优点在于无需深入了解底层硬件细节即可完成大部分常见应用开发工作[^1]。 ```verilog // 示例:通过 Clocking Wizard 实现基本时钟分配网络 wire clk_out; CLK_WIZARD_0 your_instance_name ( .clk_in1(clk_in), // 输入时钟信号 .reset(reset_signal), // 复位控制信号 .locked(locked_flag), // 锁定状态指示器 .clk_out1(clk_out) // 输出时钟之一 ); ``` --- #### 3. **基于原始组件的手动配置方法** 对于更精细的应用场景,则推荐采用直接编写 HDL 描述的方式调用 MMCME2_ADV 原始元件。这种方式提供了更大的灵活性但也增加了编码难度。 ##### 关键参数说明 | 参数名 | 功能描述 | |----------------|------------------------------------------------------------------------------------------| | CLKIN1/CLKFBIN | 主要外部输入时钟及反馈路径 | | DIVCLK_DIVIDE | 整数除法因子定义内部基础周期长度 | | CLKOUT* | 各路输出通道的具体倍率设定 | 实际编程过程中需要注意以下几点事项: - 如果输入的是差分形式的时钟信号,请先经过专用缓冲单元转换成标准 CMOS 类型再接入; - 正确计算各个分频系数以满足最终期望得到的目标值范围要求; - 对于某些特殊场合可能还需要额外考虑抖动性能指标等因素的影响[^2]^. 下面给出一段简单的例子展示如何初始化这样一个对象: ```vhdl -- VHDL Example of Instantiating the MMCME2_ADV Primitive Component component mmcme2_adv is generic( -- Generic Declarations Here... end component; signal clkin : std_logic := '0'; begin uut: mmcme2_adv generic map ( BANDWIDTH => "OPTIMIZED", CLKOUT4_CASCADE => FALSE, STARTUP_WAIT => TRUE, DIVCLK_DIVIDE => 1, CLKFBOUT_MULT_F => 5.000, CLKFBOUT_PHASE => 0.000, CLKOUT0_DIVIDE_F => 10.000, ... ) port map ( CLKIN1 => clkin, PWRDWN => '0', RST => resetn, CLKFBIN => clkfbout_buf, CLKFBOUT => open, LOCKED => locked, CLKOUT0 => clkout0, ... ); end architecture structural; ``` --- #### 4. **解决常见问题——关于 PLL 和 MMCM 的区别处理** 当遇到类似 “PLL IP 核设置失败”的情况时,通常是因为未正确指定输入时钟源类型所致。例如,在引用[3]提到的例子中,由于使用的并非普通单端时钟而是由 IBUFGDS 转换后的版本,所以必须相应更改相关属性才能正常运行程序逻辑[^3]. 另外值得注意的一点是尽管两者都属于同一类别下的子项分类但在实际运用当中往往各有侧重领域适用条件也会有所不同因此建议开发者们依据具体情况合理选用其中之一而非盲目追求单一解决方案模式。 --- ### 总结 综上所述,Vivado环境下针对FPGA芯片内的特定资源-MMCME2_ADV进行有效的管理和调控是一项非常重要的技能掌握要点不仅限于此还包括但不限于其它众多方面内容等待大家去探索发现其中奥秘所在!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值