校园导航系统

  • 主要功能设计
    • 存储结构设计
    • 详细设计
    • 主程序设计

//本人第一次发博客,有什么不对的地方,还请谅解

主要功能设计

1.图的初始化 由函数init()实现
2.学校景点介绍- 简单循环输出
3.查看浏览路线 迪杰斯特拉算法实现
4.查看两景点之间的最短路径 弗洛伊德算法实现
5.景点信息查询 对应输出
6.更改图信息 图的基本操作
7.打印邻接矩阵 输出邻接矩阵的值
8.退出 退出系统

存储结构设计

class Vexsinfo {public int ID;public String name;public String  introduction;public boolean isVisited;public Vexsinfo(int id,String name, String a){this.ID=id;this.name=name;this.introduction=a;this.isVisited=false;}}class MGraph/*图结构信息,邻接矩阵表示*/ {public Vexsinfo[]vexs;/*顶点信息*/public int [][]arcs;/*邻接矩阵,用整型值表示权值*/public int arcNum;/*边数*/public int vexNum;/*顶点数*/public MGraph(int maxVexsNum,int maxsize) {this.vexs=new Vexsinfo[maxVexsNum];this.arcs=new int[maxsize][maxsize];this.arcNum=maxVexsNum;this.vexNum=maxsize;init();}}

详细设计

/*显示景点所有信息景点*/public void introduceCompus()/*1.校园简介,显示各地点的编号`名称和简介*/{System.out.format("\n\n%-6s%-30s%s\n","编号","景点名称","简介");System.out.print("                   \n");for(int i=0;i<this.vexNum;i++)System.out.format("%-6d%-30s%s\n",this.vexs[i].ID,this.vexs[i].name,this.vexs[i].introduction);System.out.print("                    \n");}/*查看浏览线路  */public void browsePath()/*显示从给定景点出发,到其他景点的最短路径 */{/*迪杰斯特拉算法,求从顶点v0到其余顶点的最短路径p[][]及其带权长度d[v](最短路径的距离)  * P[][]数组用于存放两顶点间是否有通路标志。若p[v][w]==1,则w是从v0到v的最短路径上的顶点*/int min,t=0,v0;  //v0为起始景点编号int []d=new int[35];int [][]p=new int[35][35];System.out.print("\n请输入一个起始景点编号");Scanner sc=new Scanner(System.in);v0=sc.nextInt();System.out.print("\n\n");while(v0<0||v0>this.vexNum){System.out.print("\n你所输入的景点编号不存在");System.out.print("\n请重新输入");v0=sc.nextInt();}for(int v=0;v<this.vexNum;v++){this.vexs[v].isVisited=false;  //初始化各顶点访问标志d[v]=this.arcs[v0][v];   //v0到各顶点v的权值赋值给d[v]/*初始化p[][]数组,各顶点间的路径全部设置为空路径0*/for(int w=0;w<this.vexNum;w++)p[v][w]=0;if(d[v]<1000)  //v0到v有边相连,修改p[v][v0]的值为1{p[v][v0]=1;p[v][v]=1; //各顶点自己到自己要连通}}d[v0]=0; //自己到自己的权值为0this.vexs[v0].isVisited=true; //v0的访问标志设为true,v属于s集/*对其余vexNum-1个顶点w,依次求v到w的最短路径*/for(int i=1;i<this.vexNum;i++){ min=1000;/*在未被访问的顶点中,查找与v0最近的顶点v*/for(int w=0;w<this.vexNum;w++)if(!this.vexs[w].isVisited&&d[w]<min){t=w;min=d[w];}this.vexs[t].isVisited=true;//v的访问标志设置为1,v属于s集/*修改v0到其余各顶点w的最短路径权值d[w]*/for(int w=0;w<this.vexNum;w++)/*若w不属于s,且v到w有边相连*/if(!this.vexs[w].isVisited&&(min+this.arcs[t][w]<d[w])){d[w]=min+this.arcs[t][w];//修改v0到w的权值d[w]/*所有v0到vde最短路径上的顶点x,都是v0到w的*/for(int x=0;x<this.vexNum;x++)p[w][x]=p[t][x];/*最短路径上的顶点*/p[w][w]=1;}}for(int v=0;v<this.vexNum;v++)/*输出v0到其他顶点v的最短路径*/{if(v!=v0)System.out.print(this.vexs[v0].name);//输出景点v0的景点名/*对图中每个顶点w,试探w是否是v0到v的最短路径上的顶点*/for(int w=0;w<this.vexNum;w++){/*若w是,且w不等于v0,则输出该景点*/if(p[v][w]==1&&w!=v0&&w!=v)System.out.print("--->"+this.vexs[w].name);}System.out.print("--->"+this.vexs[v].name);System.out.print("\t总路线长为"+d[v]+"米\n\n");}}public void showShortestPath(){/*用floyd算法,求各对顶点v和w间的最短路径p[][][]及其带权长度d[v][w]* 若p[v][w][u]==1,则u是v到w的当前求得的最短路径上的顶点*/int j,k;int [][]d=new int [23][23];int [][][]p1=new int [23][23][23];/*初始化各对顶点v,w之间的起始距离d[v][w]及p[v][w][]数组*/for(int v=0;v<this.vexNum;v++)for(int w=0;w<this.vexNum;w++){d[v][w]=this.arcs[v][w];//d[v][w]中存放v至w间初始权值/*初始化最短路径p[v][w][]数组,第3分量全部清0*/for(int u=0;u<this.vexNum;u++)p1[v][w][u]=0;if(d[v][w]<1000)/*如果v至w之间有边相连*/{p1[v][w][v]=1;//v是v至w最短路径上的顶点p1[v][w][w]=1;//w是v至w最短路径上的顶点}}/*求v至w的最短路径距离*/for(int u=0;u<this.vexNum;u++)/*对任意顶点u,试探其是否为v至w最短路径上的顶点*/for(int v=0;v<this.vexNum;v++)for(int w=0;w<this.vexNum;w++)/*从v经u到w的一条路径最短*/if(d[v][u]+d[u][w]<d[v][w]){/*若i是v至u的最短路径上的点,或i是u至w最短路径上的点,则i是v至w的最短路径上的点*/for(int i=0;i<this.vexNum;i++)p1[v][w][i]=(p1[v][u][i]==1||p1[u][w][i]==1)?1:0;}System.out.print("\n请输入`出发点和目的地编号:");Scanner sc=new Scanner(System.in);k=sc.nextInt();j=sc.nextInt();System.out.print("\n\n");while(k<0||k>this.vexNum||j<0||j>this.vexNum){System.out.print("\n你所输入的景点编号不存在!");System.out.print("\n请重新输入出发点和目的地编号:\n\n");k=sc.nextInt();j=sc.nextInt();System.out.print("\n\n");}System.out.print(this.vexs[k].name);/*输出出发景点名称*/for(int u=0;u<this.vexNum;u++)if(p1[k][j][u]==1&&k!=u&&j!=u)/*输出最短路径上中间景点名称*/System.out.print(this.vexs[u].name);System.out.print(this.vexs[j].name);/*输出目的地景点名称*/System.out.print("\n\n\n总长为"+d[k][j]+"米\n\n\n");}//景点信息查询public void showVexsinfo(){System.out.print("\n请输入要查询的景点编号:");Scanner sc=new Scanner(System.in);int k=sc.nextInt();while(k<0||k>this.vexNum){System.out.print("\n你所输入的景点编号不存在!");System.out.print("\n请重新输入:");k=sc.nextInt();}System.out.println("\n\n编号:"+this.vexs[k].ID);System.out.println("\n\n景点名称:"+this.vexs[k].name);System.out.println("\n\n介绍:"+this.vexs[k].introduction);}//查找景点在图中的序号public int locateVex(int v){for(int i=0;i<this.vexNum;i++){if(v==this.vexs[i].ID)return i;//找到,返回顶点序号i}return -1;       //否则,返回-1}//更改图信息public int changeGraph(){int yourChoice;Scanner sc=new Scanner(System.in);do{yourChoice=0;System.out.print("\n-----------------------欢迎使用导游程序----------------------\n");System.out.print("\n        请选择要完成的操作!            \n\n");System.out.print("\n            菜单选择                        \n\n");System.out.print("      1.再次建图                   2.删除结点       \n");System.out.print("      3.删除边                       4.增加结点         \n");System.out.print("      5.增加边                       6.更新信息         \n");System.out.print("      7.打印邻接矩阵           8.返回上一级     \n");System.out.print("\n---------------------------------------------------------\n");System.out.print("\n请输入你的选择:");yourChoice=sc.nextInt();switch(yourChoice){case 1:recreate(); break;//重建图,调用(11)case 2:delVex();break;//删除顶点case 3:delArc();break;//删除边case 4:addVex();break;//增加顶点case 5:addArc();break;//增加边case 6:modify();break;//更新图的信息,调用(16) case 7:printMatrix();break;//输出邻接矩阵,调用(7) case 8:return 1;//返回主菜单default: System.out.print("输入选择不明确,请重新选择\n");break;}}while(yourChoice!=8);return 1;}//重建构建图,以邻接矩阵表示public int recreate(){//重建图,以图的邻接矩阵存储图int j,m,n,v0,v1,distance;System.out.print("请输入图的顶点数和边数:\n");Scanner sc=new Scanner(System.in);this.vexNum=sc.nextInt();this.arcNum=sc.nextInt();System.out.print("下面请输入景点的信息:\n");for(int i=0;i<this.vexNum;i++){//构造顶点向量System.out.print("请输入景点的编号:");this.vexs[i].ID=sc.nextInt();System.out.print("\n请输入景点的名称:");this.vexs[i].name=sc.nextLine();System.out.print("\n请输入景点的简介:");this.vexs[i].introduction=sc.nextLine();}for(int i=0;i<this.arcNum;i++)//初始化邻接矩阵for(j=0;j<this.arcNum;j++)this.arcs[i][j]=1000;System.out.print("下面请输入图的边的信息:\n");for(int i=1;i<=this.arcNum;i++){System.out.print("第"+i+"条边的起点 终点 长度为:");v0=sc.nextInt();v1=sc.nextInt();distance=sc.nextInt();m=locateVex(v0);n=locateVex(v1);if(m>=0&&n>=0){this.arcs[m][n]=distance;this.arcs[n][m]=this.arcs[m][n];}}return 1;}public int delVex()/*删除地点(顶点)*/{if(this.vexNum<=0){System.out.print("图中已无顶点");return 1;}System.out.print("\n下面请输入你要删除的景点编号:");Scanner sc=new Scanner(System.in);int v=sc.nextInt();while(v<0||v>this.vexNum){System.out.print("\n输入错误!请重新输入");v=sc.nextInt();}int m=locateVex(v);if(m<0){System.out.print("顶点“+v+”不存在!");return 1;}/*对顶点信息所在顺序表进行删除m点的操作*/for(int i=m;i<this.vexNum;i++){this.vexs[i].ID=this.vexs[i+1].ID;this.vexs[i].name=this.vexs[i+1].name;this.vexs[i].introduction=this.vexs[i+1].introduction;}/*对原邻接矩阵,删除该顶点到其余顶点的邻接关系。分别删除相应的行和列*/for(int i=m;i<this.vexNum-1;i++)   /*行*/for(int j=0;j<this.vexNum;j++)    /*列*//*二维数组,从第m+1行开始依次往前移一行,即删除m行*/this.arcs[i][j]=this.arcs[i+1][j];for(int i=m;i<this.vexNum-1;i++)   /*行*/for(int j=0;j<this.vexNum;j++)    /*列*//*二维数组,从第m+1行开始依次往前移一行,即删除m列*/this.arcs[j][i]=this.arcs[j][i+1];this.vexNum--;System.out.print("顶点"+m+"删除成功!");return 1;}public int delArc()   /*删除边*/{if(this.arcNum<=0){System.out.print("图中已边,无法删除。");return 1;}System.out.print("\n下面请输入你要删除的边的起点和终点点编号:");Scanner sc=new Scanner(System.in);int v0=sc.nextInt();int v1=sc.nextInt();int m=locateVex(v0);if(m<0){System.out.print("顶点“+v0+”不存在!");return 1;}int n=locateVex(v1);if(n<0){System.out.print("顶点“+v1+”不存在!");return 1;}this.arcs[m][n]=1000;this.arcs[n][m]=1000;this.arcNum--;System.out.print("边(“+v0+“,”+v1+”)删除成功!");return 1;}public int addVex()   /*添加景点(顶点)*/{System.out.print("请输入你要增加的结点信息:");System.out.print("\n编号:");Scanner sc=new Scanner(System.in);this.vexs[this.vexNum].ID=sc.nextInt();System.out.print("\n名称:");this.vexs[this.vexNum].name=sc.nextLine();System.out.print("\n简介:");this.vexs[this.vexNum].introduction=sc.nextLine();this.vexNum++;/*对原邻接矩阵新增加的一行及一列进行初始化*/for(int i=0;i<this.vexNum;i++) {this.arcs[this.vexNum-1][i]=1000;/*最后一行(新增的一行)*/this.arcs[i][this.vexNum-1]=1000;/*最后一列(新增的一列)*/}return 1;}public int addArc()   /*添加边*/{int m,n,distance;System.out.print("\n请输入边的起点和终点编号,权值:");Scanner sc=new Scanner(System.in);m = sc.nextInt();n = sc.nextInt();distance = sc.nextInt();while(m<0||m>this.vexNum||n<0||n>this.vexNum){System.out.print("输入错误,请重新输入");m = sc.nextInt();n = sc.nextInt();}if(locateVex(m)<0){System.out.print("此顶点“+m+”不存在");return 1;}if(locateVex(n)<0){System.out.print("此顶点“+n+”不存在");return 1;}this.arcs[m][n]=distance;this.arcs[n][m]=this.arcs[m][n];/*对称赋值*/System.out.print("边(“+m+“,”+n+”)添加成功!");return 1;}public int modify()/*更新图的部分信息,返回值:1*/{System.out.print("\n下面请输入你要修改的景点的个数:\n");Scanner sc=new Scanner(System.in);int changenum=sc.nextInt();while(changenum<0||changenum>this.vexNum){System.out.print("\n输入错误!请重新输入");changenum=sc.nextInt();}for(int i=0;i<changenum;i++){System.out.print("\n请输入景点的编号:");int m=sc.nextInt();int t=locateVex(m);System.out.print("\n请输入景点的名称:");this.vexs[t].name=sc.nextLine();System.out.print("\n请输入景点的简介:");this.vexs[t].introduction=sc.nextLine();}System.out.print("\n下面请输入你要更新的边数");changenum=sc.nextInt();while(changenum<0||changenum>this.arcNum){System.out.print("\n输入错误!请重新输入");changenum=sc.nextInt();}System.out.print("\n下面请输入更新边的信息:\n");for(int i=1;i<=changenum;i++){System.out.print("\n修改的第"+i+"条边的起点、终点的长度为:");int v0=sc.nextInt();int v1=sc.nextInt();int distance=sc.nextInt();int m=locateVex(v0);int n=locateVex(v1);if(m>=0&&n>=0){this.arcs[m][n]=distance;this.arcs[n][m]=this.arcs[m][n];}}System.out.print("图信息更新成功!");return 1;}public void printMatrix() /*打印学校地图的邻接矩阵*/{for(int i=0;i<this.vexNum;i++){System.out.print("\n");for(int j=0;j<this.vexNum;j++){if(this.arcs[i][j]==1000)System.out.print(" * ");elseSystem.out.print(this.arcs[i][j]);}}System.out.print("\n");}public void init ()/*通过初始化,一次性得到具有若干点的地图*/{String []names={"学院侧门","音乐广场","西办公楼","东办公楼","西A、西B教学楼","东A、东B教学楼","实验楼","正阳餐厅","学生宿舍1-4栋","学生宿舍5-6栋","体育场","中心广场","学生宿舍10-12栋","学生宿舍7-9栋","小广场","晨曦餐厅","新力路","第二教学楼","图书馆、第二实验大楼","体育馆","霞光餐厅","学生宿舍13、14、17、18栋","学生宿舍15-16栋",};String []introduces={"学院主路要进出口,离公交车站很近,有93、703、511、54、305等多路公交车","音乐广场,学院大门","学院西办公楼,楼高6层","学院东办公楼,楼高6层","西A、西B教学楼,楼高5层","东A、东B教学楼,楼高5层","实验大楼,楼高6层","正阳餐厅,学生食堂","学生宿舍1-4栋,楼高6层","学生宿舍4-6栋,楼高6层","体育场","中心广场,在实验楼、体育场、晨曦餐厅附近","学生宿舍10-12栋,楼高6层","学生宿舍7-9栋,楼高6层","小广场,晨曦餐厅附近","晨曦餐厅、学生食堂","红区和蓝区之间的大门及通道","第二教学楼,楼高六层","图书馆、第二实验大楼","体育馆","霞光餐厅,学生食堂","学生宿舍13、14、17、18栋,楼高六层","学生宿舍15-16栋,楼高六层"};for(int i=0;i<this.vexNum;i++)/*依次设置图的各顶点信息*/{this.vexs[i]=new Vexsinfo(i,names[i],introduces[i]);}for(int i=0;i<this.vexNum;i++)/*先初始化图的邻接矩阵*/for(int j=0;j<this.vexNum;j++)this.arcs[i][j]=1000;/*1000表示无边*/this.arcs[0][1]=185;this.arcs[0][11]=171;this.arcs[1][2]=69;this.arcs[1][3]=69;this.arcs[1][6]=180;this.arcs[1][16]=196;this.arcs[2][3]=86;this.arcs[2][4]=85;this.arcs[3][5]=85;this.arcs[4][5]=120;this.arcs[4][6]=65;this.arcs[4][16]=170;this.arcs[5][6]=65;this.arcs[6][7]=302;this.arcs[6][8]=220;this.arcs[6][9]=246;this.arcs[7][8]=97;this.arcs[7][9]=97;this.arcs[9][10]=219;this.arcs[10][11]=176;this.arcs[10][12]=244;this.arcs[11][12]=100;this.arcs[11][13]=79;this.arcs[11][14]=126;this.arcs[12][14]=69;this.arcs[13][14]=106;this.arcs[14][15]=142;this.arcs[16][17]=73;this.arcs[16][20]=246;this.arcs[16][22]=72;this.arcs[17][18]=163;this.arcs[18][19]=143;this.arcs[19][20]=90;this.arcs[20][21]=161;this.arcs[21][22]=150;for(int i=0;i<this.vexNum;i++)/*邻接矩阵是对称矩阵,对称赋值*/for(int j=0;j<this.vexNum;j++)this.arcs[j][i]=this.arcs[i][j];}

主程序设计

import java.util.*;
public  class Teat  {public static void main(String[] args) {// TODO Auto-generated method stubint yourChoice;String iSExit="n";MGraph campus=new MGraph(23,23);Scanner in=new Scanner (System.in);do {yourChoice=0;System.out.print("\n--------------------------------欢迎使用校园导游系统----------------------------------\n");System.out.print("\n                            欢迎来到电子科技大学成都学院!\n\n");System.out.print("\n                     菜 单 选 择\n\n ");System.out.print("\n             1.学校景点介绍                         2.查看游览路线\n\n");System.out.print("\n             3.查询景点间最短路径            4.景点信息查询\n\n");System.out.print("\n             5.更改图信息                              6.打印领接矩阵\n\n");System.out.print("\n             7.退出\n");System.out.print("\n---------------------------------------------------------------------------------\n");System.out.print("\n请输入你的选择\n");yourChoice=in.nextInt();switch(yourChoice){case 1:campus.introduceCompus(); break;case 2:campus.browsePath(); break;case 3:campus.showShortestPath(); break;case 4:campus.showVexsinfo(); break;case 5:campus.changeGraph(); break;case 6:campus.printMatrix(); break;case 7:System.out.print("您确定要退出系统么?(Y/N):");iSExit=in.nextLine();if(iSExit=="Y"||iSExit=="y")System.exit(0);elseiSExit="n";break;default:System.out.print("输入选择不明确,请重新输入\n");break;}}while(yourChoice!=7||iSExit=="n");in.close();}
}

校园导航系统 数据结构相关推荐

  1. 数据结构课设之校园导航系统(迪杰斯特拉算法)

    一.需求分析 介绍学校的主要地点和这些地点的特点,以及从一个地点到达另外一个地点的最短路径. 二.系统设计 1.理论依据 根据设计要求分析校园导航系统的设计要求,掌握设计中所设计到的无向网的建立,遍历 ...

  2. 数据结构课程设计 校园导航系统

    校园导航系统 [问题描述] 当对校园参观时,会遇到这样的问题:如果从校园的某个位置出发,参观到校园中的所有景点,怎样设计路线,使参观者既能参观所有景点又使走的路程最少. [数据描述] 定义一个邻接矩阵 ...

  3. 数据结构课设+校园导航系统+西安邮电大学

    数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...

  4. 数据结构课设+校园导航系统

      前言 1. 设计目的 2.设计内容与要求 2.1设计内容 2.2课题要求 3.设计思路 3.1关键问题描述 3.2程序处理流程图 ​4.实现过程 4.1功能实现 4.2 测试运行​ 5.代码实现 ...

  5. 数据结构 图定义和实现 根据郑州轻工业大学的校园平面图设计一个简单的校园导航系统,设计数据结构和算法实现相应功能

    题目:根据郑州轻工业大学科学校区的校园平面图设计一个简单的校园导航系统,设计数据结构和算法实现相应功能.要求所含景点不少于8个(软件学院为其中一个景点).以图中顶点表示学校内各景点,存放景点的名称.景 ...

  6. 数据结构课程设计——校园导航系统

    设计思想: 利用迪杰斯特拉求单源最短路算法,设计出郑州升达经贸管理学院的校园导航,求出学校一个景点到另一个景点的最短距离及路线. 系统功能: 将校园设计为平面图,将学校各代表景点构成一个抽象的无向带权 ...

  7. 校园导航系统java具有gui,[数据结构大作业]HBU Guide 河北大学校园导航

    [数据结构大作业]HBU Guide 河北大学校园导航 校园导航问题 实验报告介绍: 博客园 https://www.cnblogs.com/hx97/p/11967398.html CSDN htt ...

  8. 数据结构与算法综合课程设计——校园导航系统

    1.设计目的  应用所学的数据结构与算法知识完成一个具有一定实际意义的应用程序的设计.编码与调试,锻炼实践动手能力,提高编程水平. 2.设计内容  课题名称:校园导航系统 问题描述:校园导航系统用无向 ...

  9. 数据结构课设——校园导航系统

    我们不造轮子,我们只是轮子的搬运工. 校园导航系统不是很难,因为最短路径已经有了Dijkstra算法,这就是一个轮子,可以直接用. 我们需要的只是往这个算法里面加参数还有对界面的创作,这些都很简单.不 ...

  10. 校园导航系统(导航方式:步行,骑行,车行)

    前言 学校数据结构课程要求做的课程设计 一.设计目的 (1).首先,在选择校园导航系统的图的存储结构时,由于当时还没有确定课题题目,最后一段时光临时学习了图的两种存储结构,由于本人认为邻接矩阵存储比较 ...

最新文章

  1. Jenkins+Ant+TestNG+Testlink自动化构建集成
  2. p2p webrtc服务器搭建系列1: 房间,信令,coturn打洞服务器
  3. 在Python中变量名这样写,就是给自己挖坑
  4. 优化gradle下载引用jar速度慢或者出错的问题
  5. android纵向列表菜单栏实现,RecyclerView实现常见的列表菜单
  6. python 基本数据类型常用方法总结
  7. linux下php支持mysql_linux下php扩展mysqli的支持 .
  8. vs2010调试运行时弹出对话框:系统找不到指定文件
  9. MIUI Android p手势,小米8 Android P内测9月开启
  10. 使用OpenCV-python提取图片中的硬币
  11. mac下安装php环境
  12. cas5.3 → 连接mysql数据库
  13. spark如何进行聚类可视化_利用spark做文本聚类分析
  14. AOP(execution表达式)
  15. Python中文分词神器---jieba
  16. 【玩转数据系列十五】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)
  17. 0x752940B2(KernelBase.dll)(xxx.exe中有未经处理的异常:0xE0000008)
  18. 基于python代码的3D地图可视化
  19. Android 9 红米4x,红米4X lineage16 安卓9.0 极致省电 纯净 完美root Xposed 经典版
  20. 啥?Grafana 还能为日志添加告警?

热门文章

  1. 服务器桌面假死怎么处理,只需一分钟轻松搞定Win7桌面假死问题
  2. google地图距离算法_谷歌地图计算两个坐标点的距离函数
  3. 智汇上海:微软在中国的AI人工智能布局
  4. Windows文件保护简介
  5. 企业域名和企业邮箱究竟有什么关系?
  6. 036多级节点实现层叠展开与收缩的功能
  7. linux 7 查看网卡配置文件,如何查询centos网卡配置文件
  8. 橡胶软接头的安装及使用说明
  9. webrtc.node: undefined symbol: _ZN3rtc10DIGEST_MD5E
  10. __imp__ZN11QSerialPortC1EP7QObject