草庐IT

蓝桥杯2022年第十三届省赛真题-回忆迷宫

嘎嘎乱敲怎么说 2023-04-14 原文

题目描述

爱丽丝刚从一处地下迷宫中探险归来,你能根据她对于自己行动路径的回忆,帮她画出迷宫地图吗? 

迷宫地图是基于二维网格的。爱丽丝会告诉你一系列她在迷宫中的移动步骤,每个移动步骤可能是上下左右四个方向中的一种,表示爱丽丝往这个方向走了一格。你需要根据这些移动步骤给出一个迷宫地图,并满足以下条件: 

1、爱丽丝能在迷宫内的某个空地开始,顺利的走完她回忆的所有移动步骤。 

2、迷宫内不存在爱丽丝没有走过的空地。 

3、迷宫是封闭的,即可通过墙分隔迷宫内与迷宫外。任意方向的无穷远处视为迷宫外,所有不与迷宫外联通的空地都视为是迷宫内。(迷宫地图为四联通,即只有上下左右视为联通) 

4、在满足前面三点的前提下,迷宫的墙的数量要尽可能少。 

输入格式

第一行一个正整数 N,表示爱丽丝回忆的步骤数量。

接下来一行 N 个英文字符,仅包含 UDLR 四种字符,分别表示上(Up)、下(Down)、左(Left)、右(Right)。 

输出格式

请通过字符画的形式输出迷宫地图。迷宫地图可能包含许多行,用字符 ‘*’ 表示墙,用 ‘ ’(空格)表示非墙。

你的输出需要保证以下条件:

1、至少有一行第一个字符为 ‘*’。

2、第一行至少有一个字符为 ‘*’。

3、每一行的最后一个字符为 ‘*’。

4、最后一行至少有一个字符为 ‘*’。

样例输入

17
UUUULLLLDDDDRRRRU

样例输出

 ***** 
*     *
* *** *
* *** *
* *** *
*     *
 ***** 

提示

爱丽丝可以把第六行第六个字符作为起点。

外墙墙墙墙墙外

墙内内内内内墙

墙内墙墙墙内墙

墙内墙墙墙内墙

墙内墙墙墙内墙

墙内内内内内墙

外墙墙墙墙墙外

对于所有数据,0 < N ≤ 100.

暴躁开干!

题目:一哥们玩迷宫,迷宫所有路他都走过,把迷宫画出来

输入:移动步骤

输出:矩阵地图

解题:1.最外层墙包裹的是迷宫空间(迷宫内)

           2.最外层墙外是(迷宫外)

           3.迷宫内有墙和路,且迷宫空间被墙和路填满

思路:就是有三种状态的二维矩阵嘛,走过的,墙,迷宫外。

第一步:画地图你要不要纸!要纸你到底拿多大可以保证纸一定画得下你的地图!所以第一步决定拿多大的纸很重要!

        不同的移动步骤围成的迷宫肯定不同,题目条件给了输入总步骤不大于一百,那么假设极端条件,一直向一个方向走,二维数组的最大边的长103,头尾两个墙加100步加初始位置1,好了你要么上下左右走,老子上下左右的空间都开到超过103,绝对装得下这个地图!暴躁!我直接开300*300的二维数组!从中间开始走稳了!

    static char[][] table = new char[300][300];

        纸能画下地图了,但是输出的时候你得修剪一下你的纸的大小,修剪成刚好画下你的图的大小,定义maxx,minx,maxy,miny来维护地图的长和宽,画完之后遍历四个点坐标内的数据就是地图了

    static int x = 150;
    static int y = 150;
    static int maxx = 151;
    static int minx = 149;
    static int maxy = 151;
    static int miny = 149;

第二步:开始画!画三种不同的东西拿三只不同颜色的笔画当然是最简单啦!

 纸摆好!

//        初始化大地图全为走过的
        int n = table.length;
        int m = table[0].length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                table[i][j]= ' ';
            }
        }

移动步骤拿来!

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        String empty = sc.next();
        char[] chars = empty.toCharArray();

上笔!路‘*’    走过‘1’  画!

//        初始化第一步   真实走过标记为1   墙为*
        table[y][x] = '1';
        table[y+1][x] = '*';
        table[y-1][x] = '*';
        table[y][x+1] = '*';
        table[y][x-1] = '*';
 //遍历移动步骤画出路和路边的墙
        for (char asc : chars) {
            if (asc == 'U') {
                up();
            } else if (asc == 'L') {
                left();
            } else if (asc == 'D') {
                down();
            } else if (asc == 'R'){
                right();
            }
//            map();
        }

 脸朝向的前左右都设为墙,注意哦,是脸朝向!你脸向的是左和脸向右,你的前左右是不同的,想象一下。

public static void  up(){
        y--;
        table[y][x] = '1';
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        miny = Math.min(y-1,miny);
    }
    public static void down(){
        y++;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        maxy = Math.max(y+1,maxy);
    }
    public static void left(){
        x--;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        minx = Math.min(x-1,minx);
    }
    public static void right(){
        x++;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        maxx = Math.max(x+1,maxx);
    }

画完了!剪纸!就是大图里遍历给定区间内的数据,保存到另一个二维数组里

        //最大最小的x和y维护最小矩阵,取小矩阵
        retablemap = new char[maxy-miny+1][maxx-minx+1];
        remap();
    public static void remap(){
        for (int i = miny; i <= maxy; i++) {
            for (int j = minx; j <= maxx; j++) {
                retablemap[i-miny][j-minx] = table[i][j];
            }
        }
    }

到这里,用样例测一下你画出来的图长这样

 有没发现中间有个位置空了!因为这个位置和路不相邻,不能形成墙。

所以来第三步!

题意要求,迷宫内那么是路要么是墙,路已经是按输入的步骤画出来的没问题,所以地图内空的位置一定为墙。

那就是说我只要区分迷宫内和迷宫外,再把迷宫内空着的位置填墙就稳了!

那怎么区分迷宫内和迷宫外呢

第三只笔来!我把迷宫外的格子全部填2,剩下没填的地方一定就是迷宫内了。

这里用到了感染算法!感染算法就是如果我是人就把我上毒,我会感染与我相邻的人,迭代一下,迭代条件如果你旁边是人,就能被感染,如果不是人,感染不上;

这里的题意可以理解为从边开始向内感染直到碰上墙;

        int retablemapn = retablemap.length;
        int retablemapm = retablemap[0].length;

        //感染地图外侧 能被矩阵边感染的一定是地图外侧,外侧标记为2,第一行最后一行感染
        for (int i = 0; i < retablemapm; i++) {
            if (retablemap[0][i] == ' '){
                infect(retablemap,0,i,retablemapn,retablemapm);
            }
            if (retablemap[retablemapn-1][i] == ' '){
                infect(retablemap,retablemapn-1,i,retablemapn,retablemapm);
            }
        }
        //第一列最后一列感染
        for (int i = 0; i < retablemapn; i++) {
            if (retablemap[i][0] == ' '){
                infect(retablemap,i,0,retablemapn,retablemapm);
            }
            if (retablemap[i][retablemapm-1] == ' '){
                infect(retablemap,i,retablemapm-1,retablemapn,retablemapm);
            }
        }

 

    //感染算法
    public static void infect(char[][] m,int i,int j,int N,int M){
        if (i < 0 || i>=N || j<0 || j>=M ||m[i][j] != ' '){
            return;
        }
        m[i][j] = '2';
        infect(m,i+1,j,N,M);
        infect(m,i-1,j,N,M);
        infect(m,i,j+1,N,M);
        infect(m,i,j-1,N,M);

    }

看一下变化

根据移动步骤画出来的图

 

感染迷宫外

 好了,到这里把自己定的标记擦掉,填上符合题目的标记

屡一下:自己定的 2为迷宫外,1为路,*为墙,空格为迷宫内没办法通过路径渲染到的地方又因为它在迷宫内,所以也要变为墙

              题目要的 空格为迷宫外    把我们的2改为空格

                             空格为路径        把我们的1改为空格

                             *为墙                 把我们的 *不变,空格改*

//        遍历二维数组,填充墙‘ ’改为*,路标记1改‘ ’,地图外侧标记2改为‘ ’
        for (int i = 0; i < retablemapn; i++) {
            for (int j = 0; j < retablemapm; j++) {
                if (retablemap[i][j] == '1') {
                    retablemap[i][j] = ' ';
                } else if (retablemap[i][j] == ' ') {
                    retablemap[i][j] = '*';
                } else if (retablemap[i][j] == '2') {
                    retablemap[i][j] = ' ';

                }
            }
        }
        打印填充墙后的图
//        System.out.println("-----------------");
        for (int i = 0; i < retablemapn; i++) {
            for (int j = 0; j < retablemapm; j++) {
                System.out.print(retablemap[i][j]);
            }
            System.out.println();
        }
    }

上测试结果

上测试地址

 https://www.lanqiao.cn/problems/2150/learning/

上完整代码

import java.util.Scanner;

/**
 题目描述
 爱丽丝刚从一处地下迷宫中探险归来,你能根据她对于自己行动路径的回忆,帮她画出迷宫地图吗?

 迷宫地图是基于二维网格的。爱丽丝会告诉你一系列她在迷宫中的移动步骤,每个移动步骤可能是上下左右四个方向中的一种,表示爱丽丝往这个方向走了一格。你需要根据这些移动步骤给出一个迷宫地图,并满足以下条件:

 1、爱丽丝能在迷宫内的某个空地开始,顺利的走完她回忆的所有移动步骤。

 2、迷宫内不存在爱丽丝没有走过的空地。

 3、迷宫是封闭的,即可通过墙分隔迷宫内与迷宫外。任意方向的无穷远处视为迷宫外,所有不与迷宫外联通的空地都视为是迷宫内。(迷宫地图为四联通,即只有上下左右视为联通)

 4、在满足前面三点的前提下,迷宫的墙的数量要尽可能少。

 输入格式
 第一行一个正整数 N,表示爱丽丝回忆的步骤数量。

 接下来一行 N 个英文字符,仅包含 UDLR 四种字符,分别表示上(Up)、下(Down)、左(Left)、右(Right)。

 输出格式
 请通过字符画的形式输出迷宫地图。迷宫地图可能包含许多行,用字符 ‘*’ 表示墙,用 ‘ ’(空格)表示非墙。

 你的输出需要保证以下条件:

 1、至少有一行第一个字符为 ‘*’。

 2、第一行至少有一个字符为 ‘*’。

 3、每一行的最后一个字符为 ‘*’。

 4、最后一行至少有一个字符为 ‘*’。

 样例输入
 17
 UUUULLLLDDDDRRRRU
 样例输出
 *****
 *     *
 * *** *
 * *** *
 * *** *
 *     *
 *****
 提示
 爱丽丝可以把第六行第六个字符作为起点。

 外墙墙墙墙墙外

 墙内内内内内墙

 墙内墙墙墙内墙

 墙内墙墙墙内墙

 墙内墙墙墙内墙

 墙内内内内内墙

 外墙墙墙墙墙外

 对于所有数据,0 < N ≤ 100.
 */
public class T_05 {
    //初始点100,100
    static int x = 150;
    static int y = 150;
    static int maxx = 151;
    static int minx = 149;
    static int maxy = 151;
    static int miny = 149;

    static char[][] table = new char[300][300];
    static char[][] retablemap;

    public static void main(String[] args) {
//        初始化大地图全为走过的
        int n = table.length;
        int m = table[0].length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                table[i][j]= ' ';
            }
        }

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        String empty = sc.next();
        char[] chars = empty.toCharArray();
//        初始化第一步   真实走过标记为1   墙为*
        table[y][x] = '1';
        table[y+1][x] = '*';
        table[y-1][x] = '*';
        table[y][x+1] = '*';
        table[y][x-1] = '*';

//            x        table[miny][minx]       table[miny][maxx]
//          0->200          99                        101
//       y  |
//         200              101
//                     table[maxy][minx]       table[maxy][maxx]
        //遍历移动步骤画出路和路边的墙
        for (char asc : chars) {
            if (asc == 'U') {
                up();
            } else if (asc == 'L') {
                left();
            } else if (asc == 'D') {
                down();
            } else if (asc == 'R'){
                right();
            }
//            map();
        }
        //最大最小的x和y维护最小矩阵,取小矩阵
        retablemap = new char[maxy-miny+1][maxx-minx+1];
        remap();

        //取最小矩阵的行和列
        int retablemapn = retablemap.length;
        int retablemapm = retablemap[0].length;

        //感染地图外侧 能被矩阵边感染的一定是地图外侧,外侧标记为2,第一行最后一行感染
        for (int i = 0; i < retablemapm; i++) {
            if (retablemap[0][i] == ' '){
                infect(retablemap,0,i,retablemapn,retablemapm);
            }
            if (retablemap[retablemapn-1][i] == ' '){
                infect(retablemap,retablemapn-1,i,retablemapn,retablemapm);
            }
        }
        //第一列最后一列感染
        for (int i = 0; i < retablemapn; i++) {
            if (retablemap[i][0] == ' '){
                infect(retablemap,i,0,retablemapn,retablemapm);
            }
            if (retablemap[i][retablemapm-1] == ' '){
                infect(retablemap,i,retablemapm-1,retablemapn,retablemapm);
            }
        }


//        遍历二维数组,填充墙‘ ’改为*,路标记1改‘ ’,地图外侧标记2改为‘ ’
        for (int i = 0; i < retablemapn; i++) {
            for (int j = 0; j < retablemapm; j++) {
                if (retablemap[i][j] == '1') {
                    retablemap[i][j] = ' ';
                } else if (retablemap[i][j] == ' ') {
                    retablemap[i][j] = '*';
                } else if (retablemap[i][j] == '2') {
                    retablemap[i][j] = ' ';

                }
            }
        }
        打印填充墙后的图
//        System.out.println("-----------------");
        for (int i = 0; i < retablemapn; i++) {
            for (int j = 0; j < retablemapm; j++) {
                System.out.print(retablemap[i][j]);
            }
            System.out.println();
        }
    }
    //感染算法
    public static void infect(char[][] m,int i,int j,int N,int M){
        if (i < 0 || i>=N || j<0 || j>=M ||m[i][j] != ' '){
            return;
        }
        m[i][j] = '2';
        infect(m,i+1,j,N,M);
        infect(m,i-1,j,N,M);
        infect(m,i,j+1,N,M);
        infect(m,i,j-1,N,M);

    }
    //大矩阵取小矩阵
    public static void remap(){
        for (int i = miny; i <= maxy; i++) {
            for (int j = minx; j <= maxx; j++) {
                retablemap[i-miny][j-minx] = table[i][j];
            }
        }
    }


    //上 (Up)、 下 (Down)、左 (Left)、右 (Right)。
    public static void  up(){
        y--;
        table[y][x] = '1';
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        miny = Math.min(y-1,miny);
    }
    public static void down(){
        y++;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        maxy = Math.max(y+1,maxy);
    }
    public static void left(){
        x--;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x-1] != '1'){
            table[y][x-1] = '*';
        }
        minx = Math.min(x-1,minx);
    }
    public static void right(){
        x++;
        table[y][x] = '1';
        if (table[y+1][x] != '1'){
            table[y+1][x] = '*';
        }
        if (table[y-1][x] != '1'){
            table[y-1][x] = '*';
        }
        if (table[y][x+1] != '1'){
            table[y][x+1] = '*';
        }
        maxx = Math.max(x+1,maxx);
    }
}

有关蓝桥杯2022年第十三届省赛真题-回忆迷宫的更多相关文章

  1. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  2. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  3. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  4. 蓝桥杯C/C++VIP试题每日一练之报时助手 - 2

    ?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是:  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。  如果m不为0,则将时读出来,然后将分读出来,如5

  5. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  6. 十四届蓝桥青少组模拟赛Python-20221108 - 2

    十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)

  7. 2022年10月23日周赛ZZULIOJ - 2

    文章目录问题B:芝华士威士忌和他的小猫咪们代码&注释问题C:愿我的弹雨能熄灭你们的痛苦代码注释问题D:猜糖果游戏代码注释问题E:有趣的次方代码注释问题F:这是一个简单题代码&注释问题G:打印矩阵代码注释问题H:scz的简单考验代码注释问题I:完美区间代码&注释问题J:是狂热的小迷妹一枚吖~代码&注释2022年10月23日周赛ZZULIOJ问题B:芝华士威士忌和他的小猫咪们时间限制:1Sec内存限制:128MB题目描述芝华士威士忌很喜欢带着他的猫咪们一块跑着玩。但是小猫咪们很懒,只有在离他y米以内才愿意和他一块跑。这天他在坐标为x的位置,他想和他的猫咪们一块跑着玩。有n个小猫咪,第i个小猫咪在坐

  8. 【华为OD机试真题 java、python、c++】荒地电站建设【2022 Q4 100分】(100%通过+复盘思路) - 2

    代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为

  9. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  10. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

随机推荐