课程设计(论文)-基于BFS算法的图的遍历设计与实现.docx
《课程设计(论文)-基于BFS算法的图的遍历设计与实现.docx》由会员分享,可在线阅读,更多相关《课程设计(论文)-基于BFS算法的图的遍历设计与实现.docx(25页珍藏版)》请在咨信网上搜索。
沈阳理工大学课程设计专用纸 0 摘 要 本文采用图的邻接矩阵实现了最短路径问题中图的存储;采用队列实现了图的广度优先搜索(BFS),用类的成员函数实现了其各个功能。本C++程序实现了图的最短路径存储及BFS遍历,采用Visual C++ 6.0的控制台工程和MFC工程分别实现了邻接矩阵在桌面上的的显示以及实现对图的广度遍历程序,通过对两种程序的测试结果表明:基于BFS算法的图的遍历算法原理正确,两种程序均能正确求解给定的图的遍历问题。 关键词:邻接矩阵;队列;广度优先搜索;控制台工程;MFC图形界面目 录 1 需求分析 1 2 算法基本原理 1 2.1邻接矩阵 1 2.2图的遍历——广度优先搜索(BFS) 2 3 类设计 3 3.1 类的概述 3 3.2 类的接口设计 4 3.3 类的实现 5 4 基于控制台的应用程序 9 4.1 主函数设计 9 4.2 运行结果及分析 10 5 基于MFC的应用程序 12 5.1 图形界面设计 12 5.2 程序代码设计 14 5.3 运行结果及分析 20 结 论 22 参考文献 23 II 1 需求分析 (1)图的应用和研究可追溯到18世纪。1736年,被称为图论之父的欧拉解决了哥尼斯堡(Konigsberg)问题,从而奠定了图论这门学科及其应用的基础。 (2) 图作为一种非线性数据结构,被广泛应用与多个技术领域,诸如系统工程、化学分析、统计力学、遗传学、控制论、人工智能、编译系统等领域,在这些技术领域中把图结构作为解决的数学手段之一。 (3)程序测试数据来自姜学军 李筠主编的《数据结构(C语言描述)》中,所选的无向图是: 1 3 2 6 5 7 4 8 图 1 2 算法基本原理 2.1 邻接矩阵 邻接矩阵是表示节点之间的相邻接关系的矩阵。 若G是有n个节点的图,则G的邻接矩阵是如下定义的n X n矩阵。 如图所示图G的邻接矩阵如下: 2 1 0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 4 3 图G G的邻接矩阵 2.2 图的遍历——广度优先搜索(BFS) 例如,有如下无向图: 1 3 2 6 5 7 4 8 操作步骤如下: ①先输出1(1为起点),将1入队; ②1出队,由于1的邻接顶点2和3未被访问过,输出2和3并将2和3入队; ③2出队,2的邻接顶点1; ④3出队,由于3的邻接顶点1被访问过,而邻接顶点6和7未被访问过,输出6和7并将6和7入队; ⑤4出队,由于4的邻接顶点2被访问过,而邻接顶点8未被访问过,输出8并将8入队; ⑥最后5,6,7,8出队,由于它们的邻接顶点都被访问过;此时队空,表示搜索已结束。 3 类设计 3.1 类的概述 本题设计的关键是对图的广度优先搜索算法的设计,由于使用邻接矩阵来存储图,就要将广度优先搜索的算法扩展到矩阵中。首先应设计无向图类Graph然后设计成员变量,用二维数组edge来表示图边的权值,一维数组vertex来表示顶点信息,eNum来表示边的数量,vNum来表示顶点数量,以及在遍历中需要的访问标记数组visited。最后还要设计成员函数实现对邻接矩阵的输出print(),广度优先搜索函数BFS()。考虑到图的初始化比较复杂,需要Graph(int a,int b)输入各个顶点信息,int InitGraph()输入每条边的权值。由于调用BFS()需要用到队列,还需要设计结点类QueueNode和队列类LinkQueue;用data表示结点数据,*next表示结点指针域,使用构造函数QueueNode()对结点进行初始化;用*front和*rear表示队列的前驱和后继,使用void Init_Queue()对队列进行初审,判断队列是否为空: void Init_Queue(),入队类操作: int En_Queue(DataType e),出队列操作: void De_Queue(DataType &e)。由于程序比较复杂,Graph类的接口实现放在Graph.h中, QueueNode类和LinkQueue类的接口放在Queue.h中,类的实现和主函数放在main.cpp中。 3.2类的接口设计 ************************************************************************************** //Graph.h Graph类的接口设计 using namespace std; const int maxnum=100; //设置邻接矩阵的最大阶数 class Graph { private: char vertex[maxnum]; //图的顶点信息 int edge[maxnum][maxnum]; //图的边信息 int vNum; //顶点个数 int eNum; //边的个数 bool visited[maxnum]; //标记这个顶点是否被访问过,0表示没有,1表示已经被访问过 public: Graph(int a,int b); //构造函数 int InitGraph(); //图类的初始化函数 void print(); //输出邻接矩阵 void BFS(); //广度优先遍历邻接矩阵 }; ************************************************************************************** //Queue.h QueueNode类和LinkQueue类的接口设计: typedef int DataType; class QueueNode {public: DataType data; QueueNode *next; QueueNode() { next=NULL; } }; class LinkQueue {public: QueueNode *front; QueueNode *rear; LinkQueue(){}; //构造函数 void Init_Queue() //初始化 { front=NULL; rear=NULL; } ~LinkQueue() //析构函数 { QueueNode *p,*q; p=front; while(p) { q=p; p=p->next; delete q; } front=NULL; rear=NULL; } int Empty_Queue(); //判断队列是否为空 int En_Queue(DataType e); //入队列操作 void De_Queue(DataType &e); //出队列操作 }; 3.3 类的实现 //main.cpp int LinkQueue::Empty_Queue() { return(front==NULL&&rear==NULL); } int LinkQueue::En_Queue(DataType e) { QueueNode *p=new QueueNode; if(p) //判断是否申请成功 { p->data=e; if(rear)rear->next=p; else front=rear=p; return 1; } else return 0; } void LinkQueue::De_Queue(DataType &e) { QueueNode *p; if(!Empty_Queue()) { p=front; e=p->data; front=front->next; if(!front)rear=NULL; delete p; } } Graph::Graph(int a,int b) { cout<<"创建顶点数为"<<a<<"边数"<<b<<"的无向图"<<endl; vNum=a; eNum=b; //为了防止原先存在e[][]中的数据对今后的搜索造成影响,所以对其进行初始化 for(int i=0;i< vNum;i++) { for(int j=0;j< vNum;j++) { edge[i][j] = 0; } } } int Graph::InitGraph() { int i,j,temp,flag=0; for (i=0;i<vNum;i++) { cout<<"请输入第"<<i+1<<"个顶点信息:"; cin>>vertex[i]; } //输入各个边的具体情况 cout<<"请输入各个边的权值"<<endl; for (i=0;i<vNum;i++) { for(j=i+1;j<vNum;j++) { cout<<vertex[i]<<"->"<<vertex[j]<<":"; cin>>temp; edge[i][j]=temp; edge[j][i]=temp; if(temp)flag++; if(flag==eNum) { cout<<"初始化无向图邻接矩阵完毕"<<endl; return 0; } } } return 1; } //输出邻接矩阵 void Graph::print() { cout<<"邻接矩阵为"<<endl; int i,j; for (i=0;i<vNum;i++) { for (j=0;j<vNum;j++) cout<<edge[i][j]<<" "; cout<<endl; } } void Graph::BFS() { cout<<"广度优先搜索(BFS)"<<endl; int i,j; LinkQueue Q; //生成辅助队列对象Q for(i=0;i<vNum;++i) visited[i]=false; //访问标志数组初始化 Q.Init_Queue(); //初始化队列Q for(i=0;i<vNum;++i) if(!visited[i]) //对未访问的顶点进行收缩 { visited[i]=true; cout<<vertex[i]<<" "; Q.En_Queue(i); while(!Q.Empty_Queue()) //队列非空 { int m; Q.De_Queue(m); for(j=0;j<vNum;j++) if((edge[m][j]==1)&&(!visited[j])) { visited[j]=true; cout<<vertex[j]<<" "; Q.En_Queue(j); } } } } 4 基于控制台的应用程序 4.1主函数设计 int main() { int x,y; cout<<"请输入顶点数x=";cin>>x; y=x*(x-1)/2; Graph G(x,y); G.InitGraph(); G.print(); G.BFS(); cout<<endl; return 0; } 4.2运行结果分析 图1程序运行结果 程序运行后首先创建了图类的对象,调用构造函数,产生一个顶点数为6,边数为15的无向图,然后初始化这个图,从键盘输入每个顶点的信息(a b c d e f)和每条边的权值。在主函数中直接调用邻接矩阵输出函数和广度优先搜索结果。 5 基于MFC的应用程序 MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。 5.1 图形界面设计 首先在VC中建立MFC AppWizard(exe)工程,名称为课程设计MFC,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如图2~3所示。其余Steps均为默认选项。 图2 建立MFC AppWizard(exe)工程 图3 建立基于对话框的应用程序 将对话框资源中的默认对话框利用工具箱改造成如图4所示界面 图4 图4所示的界面中包含了11个Static Text控件,4个Button控件,和12个Edit Box控件,控件的基本信息列表如下表1所示。 表1 控件基本信息 控件类别 控件ID 控件Caption 说明 Static Text IDC_STATIC 5顶点无向图各边的权值 a->b a->c a->d a->e b->c b->d b->e c->d c->e d->e Botton IDC_BUTTON_LJ 邻接矩阵 IDC_BUTTON_BFS 广度优先遍历 IDC_BUTTON_CLEAN 清空 IDCANCEL 退出 Edit Box IDC_EDIT_12 邻接矩阵的权值 IDC_EDIT_13 IDC_EDIT_14 IDC_EDIT_15 IDC_EDIT_23 IDC_EDIT_24 IDC_EDIT_25 IDC_EDIT_34 IDC_EDIT_35 IDC_EDIT_45 IDC_EDIT_MATRIX 显示邻接矩阵 IDC_EDIT_COUT 显示遍历结果 5.2 程序代码设计 为了能够将对话框界面上的控件能够与代码联系起来,需要为12个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图5所示。 图5 成员变量设置界面 下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。 (1).将基于控制台应用程序的头文件Queue.h、Graph.h加入到MFC工程的头文件中,同时将控制台应用程序的源文件main.cpp改名为premain.h加入到MFC的头文件中,同时需要修改部分: a.删除main.cpp(premain.h)的主函数int main()。 b.删除main.cpp(premain.h)的删除print()函数。 c.把Graph.h中的Graph类的所有成员该为public。 d.在Graph.h中的Graph类声明一个Cstring型变量Dstr。 e.在BFS()函数中CString 型变量temp。 f.将BFS()函数中的cout语句删除,同时将BFS()函数的部分代码修改: 在删除cout语句的地方加上 temp.Format("%d ",i+1);Dstr+=temp; 两条语句。 (2).在对话框类的实现文件课程设计MFCDlg.cpp加入#include "premain.h"(在premain.h中已经包含了”Queue.h”、”Graph.h”),以实现在该文件中可使用Graph类。 (3). 在对话框类的实现文件课程设计MFCDlg.cpp中加入Graph g(5,6);,构造一个5顶点的无向图。 (4).如图所示: 示意图 双击邻接矩阵按钮、广度优先搜索按钮、清空按钮,分别为其建立响应函数:邻接矩阵的响应函数OnButtonLj();广度优先搜索的响应函数OnButtonBfs();清空的响应函数OnButtonClean() (5). 邻接矩阵的响应函数代码(OnButtonLj()): void CMFCDlg::OnButtonLj() { CString str[10][10]; UpdateData(TRUE); g.edge[0][1]=m_e12; g.edge[1][0]=m_e12; g.edge[0][2]=m_e13; g.edge[2][0]=m_e13; g.edge[0][3]=m_e14; g.edge[3][0]=m_e14; g.edge[0][4]=m_e15; g.edge[4][0]=m_e15; g.edge[1][2]=m_e23; g.edge[2][1]=m_e23; g.edge[1][3]=m_e24; g.edge[3][1]=m_e24; g.edge[1][4]=m_e25; g.edge[4][1]=m_e25; g.edge[2][3]=m_e34; g.edge[3][2]=m_e34; g.edge[2][4]=m_e35; g.edge[4][2]=m_e35; g.edge[3][4]=m_e45; g.edge[4][3]=m_e45; m_str_matrix=""; UpdateData(0); for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { str[i][j].Format("%i,",g.edge[i][j]); m_str_matrix+=str[i][j]; } m_str_matrix+="\r\n"; UpdateData(FALSE); } UpdateData(FALSE); } (6). 广度优先搜索的响应函数代码(OnButtonBfs()): void CMFCDlg::OnButtonBfs() { // TODO: Add your control notification handler code here int x; CString str[10][10]; UpdateData(TRUE); g.edge[0][1]=m_e12; g.edge[1][0]=m_e12; g.edge[0][2]=m_e13; g.edge[2][0]=m_e13; g.edge[0][3]=m_e14; g.edge[3][0]=m_e14; g.edge[0][4]=m_e15; g.edge[4][0]=m_e15; g.edge[1][2]=m_e23; g.edge[2][1]=m_e23; g.edge[1][3]=m_e24; g.edge[3][1]=m_e24; g.edge[1][4]=m_e25; g.edge[4][1]=m_e25; g.edge[2][3]=m_e34; g.edge[3][2]=m_e34; g.edge[2][4]=m_e35; g.edge[4][2]=m_e35; g.edge[3][4]=m_e45; g.edge[4][3]=m_e45; g.Dstr=""; g.BFS(); m_str_cout=""; UpdateData(FALSE); for(x=0;x<5;x++) m_str_cout+=g.Dstr.GetAt(2*x)+'0'; m_str_cout.MakeUpper(); UpdateData(FALSE); } (7). 清空的响应函数代码(OnButtonClean()) void CMFCDlg::OnButtonClean() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_e12=0; m_e13=0; m_e14=0; m_e15=0; m_e23=0; m_e24=0; m_e25=0; m_e34=0; m_e35=0; m_e45=0; m_str_matrix=""; m_str_cout=""; UpdateData(FALSE); } 5.3 运行结果及分析 运行程序后,首先出现的界面如图6所示。 图6 程序初始运行界面 分别输入a->b、a->c、a->c、a->d、a->e、b->c、b->d、b->e、c->d、c->e、d->e,单击邻接矩阵按钮后,可将此无向图的邻接矩阵表示出现对话框中,如图7所示。 图7 点击邻接矩阵按钮后的界面 单击广度优先遍历按钮,实现图的邻接矩阵按照广度优先搜索遍历并显示遍历结果,如图8所示。 图8 单击广度优先遍历按钮后的界面 单击清空按钮后,对话框的编辑框内容全部置零,如图9所示。 图8 单击清空按钮后的界面 单击退出按钮后,程序能够正常实现退出。 结 论 本次课程设计作为编写Windows程序的初步尝试,能够实现程序的主要功能,可以说是取得了成功,然而好的程序绝不仅仅是只有功能性这一个指标,本此编写的MFC程序虽然能实现所需功能,但从面向对象程序设计理念和图形界面设计要求来说,尚存在不足,程序员可以此为例多加实践,达到能熟练掌握的效果。MFC为Windows应用程序开发者提供了一种快速开发的工具,尤其是MFC中提供的多种标准控件,使得开发者不再将过多的心思花在界面代码编写上,而将更多的精力投入到应用程序的逻辑功能上,在很大程度上减轻了程序员的负担。由于MFC是通用框架,没有很好的针对性,当然也就丧失了一些灵活性和效率,但是MFC的封装很浅,所以在效率上损失不大,灵活性也很好,虽然也有很多缺陷,但还是一个比较好的编程环境。 此次课程设计让我体会到了真正的结合C++图形界面开发,同样也有C++面向对象程序设计的特点,这样编出来的程序也利于我们更加深入了解C++的编程。虽然程序可以成功的编译运行,但是仍然有很多的缺点和不足: 1.graph类的设计有悖于数据结构存储的方式,并且类的成员函数全部为public,不利于信息的安全,应该将他们归于private,再设计一个成员函数对其赋值。 2.程序的界面设计并不完美,只能输入5个顶点的无向图图,应该设计为动态的输入界面,满足用户的不同需求。 3.主程序没有设计输入顶点信息的函数,所以在广度优先遍历的时候不能输出顶点信息。 通过此次任务式的程序设计,不仅巩固了我们在课堂所学的知识。更重要的是学会了沟通和交流。感觉课堂上的知识应用到实际中还是很欠缺的,因此大学里的学习课外自主学习是很重要的。获取资料以完成任务的任务型学习是很有必要的。感觉自己在面向对象的方面还很欠缺,特别是MFC方面,还有就是C++较难学。我相信自己努力了就会有回报的。凡是认真去学,都可以做好的,需要自己戒骄戒躁。真正静下心来。在IT的世界里,需要不断学习,不断努力。 参考文献 [1] 谭浩强.C++基础入门大全.北京:清华大学出版社,2012:100-102 [2] 郑莉,董渊,张瑞丰.C++语言程序设计(第3版).北京:清华大学出版社,2007:25-60 [3] 钱能.C++程序设计教程(第2版).北京:清华大学出版社,2007:100-130 [4] Richard C.Leinecker,Tom Archer. Visual C++ 6 宝典.张艳,张谦译.北京:电子工业出版社,1999 [5] 李强,贾云霞. Visual C++项目开发实践.北京:中国铁道出版社,2004 [6] 郑莉,董渊,张瑞丰.C++语言程序设计.2003 [7] H.M.Deitel,P.J.Deitel. Small C++ How to Program.2006 1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究 2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器 7. 单片机控制的二级倒立摆系统的研究 8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究 11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制 32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统 76. 基于单片机的控制系统在PLC虚拟教学实验中的应用研究 77. 基于单片机系统的网络通信研究与应用 78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究 79. 基于单片机的模糊控制器在工业电阻炉上的应用研究 80. 基于双单片机冲床数控系统的研究与开发 81. 基于Cygnal单片机的μC/OS-Ⅱ的研究 82. 基于单片机的一体化智能差示扫描量热仪系统研究 83. 基于TCP/IP协议的单片机与Internet互联的研究与实现 84. 变频调速液压电梯单片机控制器的研究 85. 基于单片机γ-免疫计数器自动换样功能的研究与实现 86. 基于单片机的倒立摆控制系统设计与实现 87. 单片机嵌入式以太网防盗报警系统 88. 基于51单片机的嵌入式Internet系统的设计与实现 89. 单片机监测系统在挤压机上的应用 90. MSP430单片机在智能水表系统上的研究与应用 91. 基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用 92. 单片机在高楼恒压供水系统中的应用 93. 基于ATmega16单片机的流量控制器的开发 94. 基于MSP430单片机的远程抄表系统及智能网络水表的设计 95. 基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计 96. 基于单片机的氨分解率检测系统的研究与开发 97. 锅炉的单片机控制系统 98. 基于单片机控制的电磁振动式播种控制系统的设计 99. 基于单片机技术的WDR-01型聚氨酯导热系数测试仪的研制 100. 一种RISC结构8位单片机的设计与实现 101. 基于单片机的公寓用电智能管理系统设计 102. 基于单片机的温度测控系统在温室大棚中的设计与实现 103. 基于MSP430单片机的数字化超声电源的研制 104. 基于ADμC841单片机的防爆软起动综合控制器的研究 105. 基于单片机控制的井下低爆综合保护系统的设计 106. 基于单片机的空调器故障诊断系统的设计研究 107. 单片机实现的寻呼机编码器 108. 单片机实现的鲁棒MRACS及其在液压系统中的应用研究 109. 自适应控制的单片机实现方法及基上隅角瓦斯积聚处理中的应用研究 110. 基于单片机的锅炉智能控制器的设计与研究 111. 超精密机床床身隔振的单片机主动控制 112. PIC单片机在空调中的应用 113. 单片机控制力矩加载控制系统的研究 项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功! 项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功! 单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文,优秀毕业论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机论文,基于单片机论文,毕业论文终稿,毕业论文初稿,本文档支持完整下载,支持任意编辑!本文档全网独一无二,放心使用,下载这篇文档,定会成功! [8] 23- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 基于 BFS 算法 遍历 设计 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文