算法分析

2023-11-16

声明:凡代码问题,欢迎在评论区沟通。承蒙指正,一起成长!

目录

一、实验内容与要求 

 二、概要设计

三、直接上代码

四、运行结果

一、实验内容与要求 

内容:(布线问题)印刷电路板将布线区域分成n*m个方格阵列,精确的电路布线问题要求确定连接方格A的中点到方格B的中点的最短布线方案,在布线时,电路只能沿直线或直角布线,为了避免线路相交,已经布线的方格做了封锁标记,其它线路不允许穿过被封锁的方格。
要求:随机输入n.m的矩阵,其中0表示未被封锁,-1表示被封锁,再输入两个坐标,表示A、B两个点。要求输出结果矩阵。

 二、概要设计

 1.申请动态二维数组grid存储方格,输入规模m、n,以及始末点a、b坐标;
2.队列式分支限界算法FindPath:用二维数组grid表示所给的方格阵列。初始时,grid[i][]=0,表示该方格允许布线,grid[i][]=-1表示该方格被封锁,不允许布线。为了便于处理方格边界的情况,算法在所给方格阵列四周设置一道“围墙”,即增设标记为“1”的附加方格。开始时,测试初始方格与目标方格是否相同。如果这两个方格相同,则不必计算,直接返回最短距离0,否则设置方格阵列的“围墙”,初始化位移矩阵offset,将起始位置的距离标记为2。数字0和1用于表示方格的开放或封锁状态,所以在表示距离时不用这两个数字,将距离的值都加2。实际距离应为标记距离减2。算法从起始位置start开始,标记所有标记距离为3的方格并存入活结点队列,然后依次标记所有标记距离为4、5、…的方格,直至到达目标方格finish或活结点队列为空时为止;
3.在算法FindPath中:定义一个表示电路板上方格位置的类Position,它的两个私有成员row和col分别表示方格所在的行和列。在电路板的任何一个方格处,布线可沿右、下、左、上4个方向进行,沿这4个方向的移动分别记为移动0、1、2、3。offset[i].row和offset[i].col(i=0,1,2,3)分别给出了沿这4个方向前进一步相对于当前方格的相对位移;
4.释放中间变量的内存,打印矩阵即数组grid的全部值,以及布线路径的坐标值。

三、直接上代码

#include <iostream>
#include <stdlib.h>
#include <queue>
using namespace std;
struct Position
{
    int row;
    int col;
};
int m,n; //规模
int **grid; //存储矩阵
void printPath(Position s,Position e);
bool FindPath(Position start,Position finish,int &PathLen,Position  *&path);
int main()
{
    int PathLen=0;
    Position start,finish,*path;
    cout << "Please enter the values of n and m:";
    cin >>m>>n;
    grid=(int **)malloc(n*sizeof(int *));
    for(int p=0; p<=n; p++)
        grid[p]=(int *)malloc(m*sizeof(int));
    cout<<"Please enter a coordinates of the start point:";
    cin>>start.col>>start.row;
    cout<<"Please enter a coordinates of the end point:";
    cin>>finish.col>>finish.row;
    FindPath(start,finish,PathLen,path);
    cout<<endl<<"The path map:"<<endl;
    printPath(start,finish);
    cout<<"Path:"<<"start_a("<<start.col<<","<<start.row<<")";
    for(int i=0; i<PathLen; i++)
        cout<<"-->("<<path[i].col<<","<<path[i].row<<")";
    cout <<"end_b"<<endl << endl << endl;
    return 0;
}
void printPath(Position s,Position e)
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if((j==s.col)&&(i==s.row))
                cout <<"a\t";
            else if((j==e.col)&&(i==e.row))
                cout <<"b\t";
            else
                cout<<grid[i][j]<<"\t";
        }cout<<endl;
    }cout<<endl<<endl;
}
bool FindPath(Position start,Position finish,int &PathLen,Position  *&path)
{
    if((start.row==finish.row) && (start.col==finish.col))
    {
        PathLen=0;
        cout<<"start=finish"<<endl;
        return true;
    } //start=finish
    cout << "Please enter a n*m matrix, where '0' means \"not blocked\", and '-1' means \"blocked\":"<<endl;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            cin>>grid[i][j];
    }
    Position offset[4]; //初始化相对位移
    offset[0].row=0;offset[0].col=1;//右
    offset[1].row=1;offset[1].col=0;//下
    offset[2].row=0;offset[2].col=-1;//左
    offset[3].row=-1;offset[3].col=0;//上
    int NumOfNbrs=4; //相邻方格数
    Position here,nbr;
    here.row=start.row;
    here.col=start.col;
    grid[start.row][start.col]=0;
    queue<Position> Q;
    do{  //标记相邻可达方格
        for(int I=0; I<NumOfNbrs; I++)
        {
            nbr.row=here.row + offset[I].row;
            nbr.col=here.col+offset[I].col;
            if(grid[nbr.row][nbr.col]==0)
            {
                grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;
                if((nbr.row==finish.row) &&(nbr.col==finish.col)) break; //完成布线
                Q.push(nbr);
            }
        }
        if((nbr.row==finish.row)&&(nbr.col==finish.col)) break; //完成布线
        if(Q.empty()) //活结点队列是否非空
            return false; //无解
        here = Q.front();
        Q.pop(); //取下一个扩展结点
    }while(true);
    PathLen=grid[finish.row][finish.col]; //构造最短布线路径
    path=new Position[PathLen];
    here=finish; //从目标位置finish开始向起始位置回溯
    for(int j=PathLen-1; j>=0; j--)
    {
        path[j]=here;
        for(int i=0; i<NumOfNbrs; i++) //找前驱位置
        {
            nbr.row=here.row+offset[i].row;
            nbr.col=here.col+offset[i].col;
            if(grid[nbr.row][nbr.col]==j)
                break;
        }
        here=nbr;     }
}
/*
#include <iostream>
#include <stdlib.h>
#include <queue>
using namespace std;
int m,n;
int **grid;
int indexcount=0;

struct Position
{
    int row;
    int col;
};
void showPath(Position s,Position e)
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if((j==s.col)&&(i==s.row))
                cout <<"a\t";
            else if((j==e.col)&&(i==e.row))
                cout <<"b\t";
            else
                cout<<grid[i][j]<<"\t";
        }
        cout<<endl;
    }
    cout<<endl<<endl;
}
bool FindPath(Position start,Position finish,int &PathLen,Position  *&path)
{
    //计算从起点位置start到目标位置finish的最短布线路径,找到最短布线路//径则返回true,否则返回false
    if((start.row==finish.row) && (start.col==finish.col))
    {
        PathLen=0;
        cout<<"start=finish"<<endl;
        return true;
    } //start=finish
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            grid[i][j]=0;
    }
    //添加阻挡点
    grid[1][1]=-1;
    grid[2][2]=-1;
    grid[3][3]=-1;
    grid[5][3]=-1;
    grid[6][2]=-1;
    grid[4][5]=-1;
//初始化相对位移
    cout<<"完整图"<<endl;
    showPath(start,finish);
    Position offset[4];
    offset[0].row=0;
    offset[0].col=1;//右
    offset[1].row=1;
    offset[1].col=0;//下
    offset[2].row=0;
    offset[2].col=-1;//左
    offset[3].row=-1;
    offset[3].col=0;//上
    int NumOfNbrs=4;//相邻方格数
    Position here,nbr;
    here.row=start.row;
    here.col=start.col;
    grid[start.row][start.col]=0;
    //grid[finish.row][finish.col]=99; //标记可达方格位置
    cout<<"布线前图"<<endl;
    showPath(start,finish);

    queue<Position> Q;
    do   //标记相邻可达方格
    {
        for(int I=0; I<NumOfNbrs; I++)
        {
            nbr.row=here.row + offset[I].row;
            nbr.col=here.col+offset[I].col;
            if(grid[nbr.row][nbr.col]==0)
            {
                //该方格未被标记
                //cout<<grid[nbr.row][nbr.col]<<endl;//显示路标值
                grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;
                //cout<<nbr.col<<"   "<<nbr.row<<endl;//显示坐标
                if((nbr.row==finish.row) &&(nbr.col==finish.col)) break; //完成布线
                Q.push(nbr);
            }
        }
        //是否到达目标位置finish?
        if((nbr.row==finish.row)&&(nbr.col==finish.col)) break;//完成布线
        //活结点队列是否非空?
        if(Q.empty()) return false;//无解
        here = Q.front();
        //cout<<here.col<<" "<<here.row<<endl;
        Q.pop();//取下一个扩展结点

        //indexcount++;
        // cout<<"下一节点"<<indexcount<<endl;
    }
    while(true);
    //构造最短布线路径
    PathLen=grid[finish.row][finish.col];
    cout<<"the sign of end:"<<PathLen<<endl;
    path=new Position[PathLen];
    //从目标位置finish开始向起始位置回溯
    here=finish;
    for(int j=PathLen-1; j>=0; j--)
    {
        path[j]=here;
        //找前驱位置
        for(int i=0; i<NumOfNbrs; i++)
        {
            nbr.row=here.row+offset[i].row;
            nbr.col=here.col+offset[i].col;
            if(grid[nbr.row][nbr.col]==j)
            {
                // cout<<j<<endl;
                break;
            }
        }
        here=nbr;//向前移动
    }
    return true;
}
int main()
{
    cout << "Please enter the value of m、n:";
    cin >>m>>n;
    grid=(int **)malloc(n*sizeof(int *));
    for(int p=0; p<=n; p++)
        grid[p]=(int *)malloc(m*sizeof(int));
    Position start;
    start.col=2;
    start.row=3;
    cout<<"布线起点"<<endl;
    cout<<start.col<<" "<<start.row<<endl;
    Position finish;
    finish.col=4;
    finish.row=2;
    cout<<"布线结束点"<<endl;
    cout<<finish.col<<" "<<finish.row<<endl;
    int PathLen=0;
    Position *path;

    FindPath(start,finish,PathLen,path);
    cout<<"布线后路径图"<<endl;
    showPath(start,finish);
    cout<<"路径:"<<"a("<<start.col<<","<<start.row<<")";
    for(int i=0; i<PathLen; i++)
    {
        cout<<"-->("<<path[i].col<<","<<path[i].row<<")";
    }
    cout <<"b"<<endl <<endl<< "布线问题完毕!" << endl;

    return 0;
}



*/

























#include <iostream>
#include <queue>
using namespace std;
int n=6;
int m=5;
int grid[7][7];
int indexcount=0;

struct Position
{
    int row;
    int col;
};
void showPath()
{
    for(int i=1; i<=m; i++)
    {
        for(int j=1; j<=n; j++)
            cout<<grid[i][j]<<"\t";
        cout<<endl;
    }
    cout<<"------------------"<<endl;
}
bool FindPath(Position start,Position finish,int &PathLen,Position  *&path)
{
    //计算从起点位置start到目标位置finish的最短布线路径,找到最短布线路//径则返回true,否则返回false

    if((start.row==finish.row) && (start.col==finish.col))
    {
        PathLen=0;
        cout<<"start=finish"<<endl;
        return true;
    } //start=finish
    //初始化图,-1为未访问
    for(int i=1; i<=m; i++)
    {
        for(int j=1; j<=n; j++)
            grid[i][j]=0;
    }
    /*/设置方格阵列“围墙”
    for(int i=0; i<= m+1; i++)
        grid[0][i]=grid[n+1][i]=1; //顶部和底部
    for(int i=0; i<= n+1; i++)
        grid[i][0]=grid[i][m+1]=1; //左翼和右翼 */
    //添加阻挡点
    grid[2][3]=-1;
    grid[3][3]=-1;
    grid[1][4]=-1;
    grid[1][1]=111;
    grid[4][3]=999;
    //初始化相对位移
    cout<<"完整图"<<endl;
    showPath();
    Position offset[4];
    offset[0].row=0;
    offset[0].col=1;//右
    offset[1].row=1;
    offset[1].col=0;//下
    offset[2].row=0;
    offset[2].col=-1;//左
    offset[3].row=-1;
    offset[3].col=0;//上
    int NumOfNbrs=4;//相邻方格数
    Position here,nbr;
    here.row=start.row;
    here.col=start.col;
    grid[start.row][start.col]=0;
    //标记可达方格位置
    cout<<"布线前图"<<endl;
    showPath();

    queue<Position> Q;
    do  //标记相邻可达方格
    {
        for(int I=0; I<NumOfNbrs; I++)
        {
            nbr.row=here.row + offset[I].row;
            nbr.col=here.col+offset[I].col;
            if(grid[nbr.row][nbr.col]==-1)
            {
                //该方格未被标记
                //cout<<grid[nbr.row][nbr.col]<<endl;//显示路标值
                grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;
                 //cout<<nbr.col<<"   "<<nbr.row<<endl;//显示坐标
            }
            if((nbr.row==finish.row) &&(nbr.col==finish.col)) break; //完成布线
            Q.push(nbr);
        }
        //是否到达目标位置finish?
        if((nbr.row==finish.row)&&(nbr.col==finish.col)) break;//完成布线
        //活结点队列是否非空?
        if(Q.empty()) return false;//无解
        here = Q.front();
        //cout<<here.col<<" "<<here.row<<endl;
        Q.pop();//取下一个扩展结点


        indexcount++;
       // cout<<"下一节点"<<indexcount<<endl;
    }while(true);
    //构造最短布线路径
    PathLen=grid[finish.row][finish.col];
    path=new Position[PathLen]; //从目标位置finish开始向起始位置回溯
    here=finish;
    for(int j=PathLen-1; j>=0; j--)
    {
        path[j]=here; //找前驱位置
        for(int i=0; i<NumOfNbrs; i++)
        {
            nbr.row=here.row+offset[i].row;
            nbr.col=here.col+offset[i].col;
            if(grid[nbr.row][nbr.col]==j)
            {
               // cout<<j<<endl;
                break;
            }
        }
        here=nbr;//向前移动
    }
    return PathLen;
}
int main()
{
    Position start;
    start.col=1;
    start.row=1;
    cout<<"布线起点"<<endl;
    cout<<start.col<<" "<<start.row<<endl;
    Position finish;
    finish.row=3;
    finish.col=4;
    cout<<"布线结束点"<<endl;
    cout<<finish.col<<" "<<finish.row<<endl;
    int PathLen=0;
    Position *path;
    FindPath(start,finish,PathLen,path);
    cout<<"布线后路径图"<<endl;
    showPath();
    cout<<"路径"<<endl<<"Start";
    for(int i=0; i<PathLen; i++)
    {
        cout<<"-->("<<path[i].col<<","<<path[i].row<<")";
    }
    cout <<"(End)"<<endl <<endl<< "布线问题完毕!" << endl;

    return 0;
}
/*
#include <iostream>
#include <queue>
#include <windows.h>
using namespace std;
int m,n;
int **grid;
int indexcount=0;

struct Position
{
    int row;
    int col;
};
void showPath()
{
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
            cout<<grid[i][j]<<" ";
        cout<<endl;
    }
    cout<<"------------------"<<endl;
}
bool FindPath(Position start,Position finish,int &PathLen,Position  *&path)
{
    //计算从起点位置start到目标位置finish的最短布线路径,找到最短布线路//径则返回true,否则返回false

    if((start.row==finish.row) && (start.col==finish.col))
    {
        PathLen=0;
        cout<<"start=finish"<<endl;
        return true;
    } //start=finish
//设置方格阵列“围墙”
//初始化图,-1为未访问
    for(int i=1; i<9; i++)
    {
        for(int j=1; j<9; j++)
            grid[i][j]=-1;

    }
    //添加阻挡点
    grid[2][3]=-2;
    for(int i=0; i<= m+1; i++)
        grid[0][i]=grid[n+1][i]=-2; //顶部和底部
    for(int i=0; i<= n+1; i++)
        grid[i][0]=grid[i][m+1]=-2; //左翼和右翼
//初始化相对位移
    cout<<"完整图"<<endl;
    showPath();
    Position offset[4];
    offset[0].row=0;
    offset[0].col=1;//右
    offset[1].row=1;
    offset[1].col=0;//下
    offset[2].row=0;
    offset[2].col=-1;//左
    offset[3].row=-1;
    offset[3].col=0;//上
    int NumOfNbrs=4;//相邻方格数
    Position here,nbr;
    here.row=start.row;
    here.col=start.col;
    grid[start.row][start.col]=0;
//标记可达方格位置
    cout<<"布线前图"<<endl;
    showPath();

    queue<Position> Q;
    do  //标记相邻可达方格
    {
        for(int I=0; I<NumOfNbrs; I++)
        {
            nbr.row=here.row + offset[I].row;
            nbr.col=here.col+offset[I].col;
            if(grid[nbr.row][nbr.col]==-1)
            {
//该方格未被标记
                //cout<<grid[nbr.row][nbr.col]<<endl;//显示路标值
                grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;
                //cout<<nbr.col<<"   "<<nbr.row<<endl;//显示坐标
            }
            if((nbr.row==finish.row) &&(nbr.col==finish.col)) break; //完成布线
            Q.push(nbr);


        }
//是否到达目标位置finish?
        if((nbr.row==finish.row)&&(nbr.col==finish.col)) break;//完成布线
//活结点队列是否非空?
        if(Q.empty()) return false;//无解
        here = Q.front();
        //cout<<here.col<<" "<<here.row<<endl;
        Q.pop();//取下一个扩展结点


        indexcount++;
        // cout<<"下一节点"<<indexcount<<endl;
    }
    while(true);
//构造最短布线路径
    PathLen=grid[finish.row][finish.col];
    path=new Position[PathLen];
//从目标位置finish开始向起始位置回溯
    here=finish;
    for(int j=PathLen-1; j>=0; j--)
    {
        path[j]=here;
//找前驱位置
        for(int i=0; i<NumOfNbrs; i++)
        {
            nbr.row=here.row+offset[i].row;
            nbr.col=here.col+offset[i].col;
            if(grid[nbr.row][nbr.col]==j)
            {
                // cout<<j<<endl;
                break;
            }
        }
        here=nbr;//向前移动
    }
    return PathLen;
}
int main()
{
    Position start;
    start.col=1;
    start.row=1;
    cout<<"输入m、n:";
    cin>>m>>n;
    grid =(int **)malloc(m*sizeof(int *));
    for(int p=0; p<m; p++)
    {
        grid[p]=(int *)malloc(n*sizeof(int));
        for(int q=0; q<n; q++)
            grid[p][q] = p*n+q;
    }
    cout<<"布线起点"<<endl;
    cout<<start.col<<" "<<start.row<<endl;
    Position finish;
    finish.row=3;
    finish.col=4;
    cout<<"布线结束点"<<endl;
    cout<<finish.col<<" "<<finish.row<<endl;
    int PathLen=0;
    Position *path;

    FindPath(start,finish,PathLen,path);
    cout<<"布线后路径图"<<endl;
    showPath();
    cout<<"路径"<<endl;
    for(int i=0; i<PathLen; i++)
    {
        cout<<path[i].col<<" "<<path[i].row<<endl;
    }
    cout << "布线问题完毕!" << endl;

    system("pause");
    return 0;
}
*/

四、运行结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法分析 的相关文章

随机推荐

  • NeoVim 安装

    一 NeoVim 是什么 hyperextensible Vim based text editor 译 基于超可扩展Vim的文本编辑器 二 如何安装NeoVim 1 brew 安装 注 brew 是 MacOS 上的包管理工具 即该命令一
  • TensorIR快速入门

    本文翻译自Blitz Course to TensorIR tvm 0 9 dev0 documentation TensorIR是一种用于深度学习程序的特定领域的语言 服务于两个广泛的目的 在各种硬件后端上转换和优化程序的实现 对自动向量
  • linux数据库的测试连接,你会遇到哪些问题?

    linux安装数据库及测试连接 第一步 第二步 第三步 第四步 本文将介绍用阿里云服务器安装两种版本的数据库 及连接时会遇到的问题 一种是5 6 一种是8 0 第一步 安装完成后 测试连接 service mysqld status 第二步
  • 当经历所有大厂的实习面试过后

    学而不思则罔 思而不学则殆 当走完基本所有大厂之后 发现其实每个公司对基础能力的考察都比较注重 只有基础掌握好了 把前端所有的知识能够一连串的理清 那么不管面试题是什么 都可以游刃有余的去回答 这里就是把我所有面试过的问题的一些底层原理阐述
  • 用Docker部署自己的JupyterHub

    话在前头 用 Docker 部署 JupyterLab 感觉是部署 JupyterLab 最方便的方式了 官方提供了很多可选的镜像 也可以自己从 jupyter base notebook 中继续打包 镜像启动命令加上 NotebookAp
  • 使用tf.keras实现 softmax多分类的代码

    softmax多分类 多分类问题的关键在于输出10个概率值 然后使用softmax进行激活 softmax激活函数 能把10个输出变为10个概率分布 然后这10个概率的和为1 1 对数几率回归 解决的是 二分类的问题 对于 多个选项 的问题
  • [云原生专题-42]:K8S - 核心概念 - placeholder-有状态服务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 placeholder 作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址
  • 讲一点点自动驾驶技术(1)概论

    讲一点点自动驾驶技术 1 概论 作为一个自动驾驶小菜鸟工程师 小Q入门才两三年时间 最近空闲时间比较多 利用这个平台把自己对于无人驾驶技术所看所学的东西在这进行一个整理 一来自己看着方便 二来供大家交流学习 Xiao Xi ps 如果大家觉
  • github 上传和拉取 support for passward authentication was removed...

    参考下面这篇文章 remote Support for password authentication was removed on August 13 2021 IT博客技术分享的博客 CSDN博客 但是记得把repositories和
  • Java教程【01.02】Java引用类型数组和继承的意义

    Java引用类型数组和继承的意义 Java引用类型数组和继承是Java中常用的两个概念 它们在编程中起到重要的作用 在本教程中 我们将讨论Java引用类型数组的使用以及继承的意义 并提供相关的示例 步骤1 创建引用类型数组 Java中的引用
  • AI2.0:十年之后我们还能做什么

    AI大模型展现惊人能力 有望成为下一代通用技术平台 2010年 麻省理工大学阿齐跌鲁教授等提出了科技发展如何影响人类就业的分析框架 当前 随着以GPT 4为代表的大语言模型的出现 A1开始具备文本生成 语言理解 知识问答 逻辑推理等能力 A
  • 代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?

    代理HTTP是一种常见的网络代理方式 它为客户端和服务器之间提供中间层 转发上下游的请求和响应 正确使用代理HTTP可以提高采集效率 增加网络安全性 加速网络速度 保护用户隐私 但是 使用不当就难以达到预期的效果 在使用代理HTTP服务器时
  • 【VMware】虚拟机中Ubuntu无法连接网络的有效解决办法

    1 Ubuntu网络设置 依次单击 System Settings gt Network gt Wired gt Options 如下图所示 依次选择 General 勾选如下图所示的单选框 最后点击 Save 如下图所示 依次选择 IPv
  • systemctl命令和配置整理

    一 systemctl介绍 systemctl主要负责控制systemd系统和服务管理器 在ubuntu centos等一系列发行版中可用 可以方便的管理需要启动的服务等 可以实现开机自启动 出错重启和定时重启等等功能 二 systemct
  • 在ipad上刷android系统更新,全自动刷安卓4.0 索尼SGPT111刷机教程

    1刷机前 无需自行准备ROM 给Android平板刷机 其实就是给平板电脑换一个新的操作系统 当然 这个操作系统还是Android系统 只是系统界面 内置应用等内容会与之前有所不同 现在网上有很多适用于各种Android手机的Rom 我们可
  • 彩超检查报告单图片_收藏最全甲状腺检查报告解析,你关心的问题都在这!

    现在甲状腺结节患者很多 拿到甲状腺超声检查报告 很多人不太能够看得明白 当问不到专科医生时 免不了会胡乱猜想 频添烦恼 现在就教大家如何看懂超声报告 了解了这些基本信息 可以帮你大致判断病情 并有效地和医生沟通 理解医生给出的建议 如何看懂
  • 人机交互重点知识点

    人机交互重点知识点 1 绪论 1 1什么是人机交互 人机交互是关于设计 评价和实现供人们使用的交互式计算机系统 且围绕这些方面的主要现象进行研究的科学 1 2人机交互的研究内容 1 人机交互界面表示模型与设计方法 2 可用性分析与评估 3
  • vue 实现全屏

    通过引用第三方库 screenfull 实现全屏 1 首先通过 npm install screenfull 执行下载 2 在使用页面进行import screenfull from screenfull 引入 3 然后绑定事件 调用提供的
  • 【第22例】IPD 体系进阶:综合创新地图

    目录 简介 专栏目录 内容 第一步 搭建框架 第二步 构思 第三步 筛选
  • 算法分析

    声明 凡代码问题 欢迎在评论区沟通 承蒙指正 一起成长 目录 一 实验内容与要求 二 概要设计 三 直接上代码 四 运行结果 一 实验内容与要求 内容 布线问题 印刷电路板将布线区域分成n m个方格阵列 精确的电路布线问题要求确定连接方格A