




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程:人工智能课程设计报告班级:姓名:学号:指导教师:赵曼2015年11月人工智能课程设计报告课程背景人工智能(ArtificialIntelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。题目一:罗马利亚度假问题一.问题描述分别用代价一致的宽度优先、有限制的深度优先(预设搜索层次)、贪婪算法和A*算法求解“罗马利亚度假问题”。即找到从初始地点Arad到目的地点Bucharest的一条路径。要求:分别用文件存储地图和启发函数表,用生成节点数比较几种算法在问题求解时的效率,并列表给出结果。数据如下:1、地图2、启发函数值Arad366Mehadia241Bucharest0Neamt234Craiova160Oradea380Doberta242Pitesti100Eforie161Rimmicu_Vikea193Fagaras176Sibiu253Glurgiu77Timisoara329Hirsova151Urziceni80Iasi226Vaslui199Lugoj244Zerind3743、地图数据表010001000100010001000100010001000100010001401000118100010001000100010007510000100010001000100075100010001000100010001000100010001000100010007010001000100001000100010001000101100010002111000901000100085100010001000100010001000100001000100010001000100010001000100010001000100010008710001000100010001000100010000100012013810001461000100010001000100010001000100010001000100010001000100010000100010001000100010001511000100010001000100010001000711000751000100012010000100010001000100010001000100010001000100010001000100010001000101100013810001000010009710001000100010001000100010001000100010001000100010001000100010001000100001000100010001000100086100010001000100010001000100010001000146100010009710000100080100010001000100010001000100010001000100021110001000100010001000100010000991000100010001000100010001000100014010001000100010001511000100010008099010001000100010001000100010001000100010009010001000100010001000100010001000100001000100010001000100010001000118100010001000100010001000100010001000100010001000010001000100010001111000100010001000100010001000100010008610001000100010001000098100010001000100010001000851000100010001000100010001000100010001000100098010001000100010001000100010008710001000100010001000100010001000100010001000100009210001000100010001000100010001000100010001000100010001000100010001000100092010001000100070100010001000100010001000100010001000100010001111000100010001000010007510001000100010007110001000100010001000100010001000100010001000100010000二.设计分析1.算法分析1)宽度优先搜索算法广度优先搜索使用队列(queue)来实现1、把根节点放到队列的末尾。2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。3、找到所要找的元素时结束程序。4、如果遍历整个图还没有找到,结束程序。2)深度优先搜索算法深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形:1、把根节点压入栈中。2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。3、找到所要找的元素时结束程序。4、如果遍历整个树还没有找到,结束程序。3)贪婪算法1.建立数学模型来描述问题⒉把求解的问题分成若干个子问题。⒊对每一子问题求解,得到子问题的局部最优解。⒋把子问题的解局部最优解合成原来解问题的一个解。实现该算法的过程:从问题的某一初始解出发;while能朝给定总目标前进一步do求出可行解的一个解元素;由所有解元素组合成问题的一个可行解。4)A*算法A*[1](A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。公式表示为:f(n)=g(n)+h(n),其中f(n)是从初始点经由节点n到目标点的估价函数,g(n)是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取:估价值h(n)<=n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,则搜索将严格沿着最短路径进行,此时的搜索效率是最高的。如果估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。2.数据结构1)图结构:实现存储“罗马尼亚度假问题”的图空间;抽象图结构的实现:typedefstruct//图节点类型 charcityname[20]; intvalue; intcost;}Ver;classGraph//图结构public: Graph(); ~Graph();VerV[MaxV]; intedge[MaxV][MaxV]; intnumofedges;//注意这个变量的引用位置 //读取地图节点信息 voidReadVertex(); //读取地图边关系信息 voidReadEdge(); //取与第V个节点的第一个邻接点 intGetFirstVertex(intv); //找到第V1个节点的V2之后的下一个邻接节点 intGetNextVertex(intv1,intv2); intGetVerValue(intindex);//获取V[index]的ver的value值 intGetVerCost(intindex);//获取V[index]的ver的cost值 intGetEdge(introw,intcol);//获取edge[row][col]的值 voidSetVerCost(intindex,intcost);2)队列结构宽度优先算法以及A*算法使用到。抽象队列结构实现:classSeqQueuepublic: SeqQueue(); ~SeqQueue(); voidQueueInitiate(); intQueueNotEmpty(); intQueueAppend(intx); intQueueDelete(int*d); intQueueOrderAppend(intx,Graph&G); //A*算法使用 intQueue_A_OrderAppend(intx,Graph&G);private: intqueue[MaxSize]; intrear; intfront; intcount;3)栈结构深度优先算法使用;栈结构的抽象类型实现:classStackpublic: Stack(); ~Stack(); boolStackNotFull(); boolStakNotEmpty(); voidStackPop(Graph&G); voidStackPush(intx,Graph&G); voidPrintStack(Graph&G); intGetWeight();private: inta[100]; inttop1; intweight;三.算法设计1)宽度优先搜索算法//宽度优先算法voidRomania_Trip::BroadFirstSearch(Graph&graph,intv) intu,w;i=0; SeqCQuenequeue; visited[v]=1;//访问节点 count++; if(v==end)return; queue.QueueAppend(v);//入队列 while(queue.QueueNotEmpty())//队列非空 queue.QueueDelete(&u);//取队列节点 w=graph.GetFirstVertex(u); while(w!=-1)//有子节点的话 if(!visited[w])//如果子节点未被访问,则访问子节点 Visit(w,u); visited[w]=1; count++; if(w==end)//找到结果 Print(graph,b,end,v); return; queue.QueueAppend(w);//节点压入队列 w=graph.GetNextVertex(u,w);2)深度优先搜索算法//深度优先算法boolisOK=false;intlevel=0;constintLevel=8;//预设的搜索层次voidRomania_Trip::DepthFirstSearch(Graph&graph,intv,Stack&stack) intw;i=0; if(isOK==true)return; if(level+1>Level)return;//大于搜索层次时不再深入 level++; visited[v]=1;//访问该节点 count++; stack.StackPush(v,graph); if(v==end||stack.GetWeight()>=MaxWeight) w=-1; if(v==end&&stack.GetWeight()<=MaxWeight) cout<<"---深度优先遍历路径为:"; stack.PrintStack(graph); /*if(MaxWeight>stack.GetWeight()) MaxWeight=stack.GetWeight();*/ cout<<"---路径长度为:"<<stack.GetWeight()<<endl <<"---访问节点数为:"<<count<<endl <<"---搜索层次:"<<level<<endl; isOK=true; else w=graph.GetFirstVertex(v);//取当前节点的第一个子节点 while(w!=-1) if(!visited[w]) DepthFirstSearch(graph,w,stack);//递归访问 w=graph.GetNextVertex(v,w);//取当前节点的下一个子节点 visited[v]=0;//返回时置该节点为未访问 stack.StackPop(graph);//将该节点弹出栈,并根据graph中weight的值更改当前栈值 level--;3)贪婪算法//贪婪算法voidRomania_Trip::Greedy_Algorithms(Graph&graph,intv) intu,w; SeqCQuenequeue;//队列存储图节点在图中的索引值,优先队列,value小的在队头 visited[v]=1; if(v==end){return;} queue.QueueOrderAppend(v,graph);//图节点按优先顺序入队列 count++;//访问节点数+1 while(queue.QueueNotEmpty())//宽度优先,循环 queue.QueueDelete(&u);//删除队列头元素并返回删除的数值 //cout<<"u="<<u<<""; w=graph.GetFirstVertex(u); while(w!=-1) if(!visited[w]) Visit(w,u);//访问w节点,将wayb的指向更新 if(w==end) //cout<<"w==end"; count++; return; queue.QueueOrderAppend(w,graph);//图节点按优先顺序入队列 count++; w=graph.GetNextVertex(u,w);}4)A*算法//A*算法voidRomania_Trip::AStar_Algorithms(Graph&graph,intv) //i=0;count=0; intu,w; SeqCQuenequeue; if(v==end)return;//到达终点 queue.Queue_A_OrderAppend(v,graph); count++; while(queue.QueueNotEmpty()) queue.QueueDelete(&u); if(u==end) cout<<"---路径长度为:"<<graph.GetVerCost(u)+graph.GetVerValue(u)<<endl <<"---访问节点数为:"<<count<<endl; return; w=graph.GetFirstVertex(u); while(w!=-1) intcost=graph.GetVerCost(u)+graph.GetEdge(w,u); graph.SetVerCost(w,cost);//设置当前节点移动到目标节点的预估费用 queue.Queue_A_OrderAppend(w,graph);//按预估费用优先入队列 count++; w=graph.GetNextVertex(u,w);四.运行结果及分析分析: 节点数路径长度耗时msOptimality:Completeness:BFS1145016NoYESDFS1260531NoNOGreedy845016NONOA*算法164180YESYES通过比较,Greedy搜索生成的结点数目最少,为8个,效率最高;A*算法生成的结点数目最多,为30个,效率最低。DFS(一般)、BFS和Greedy搜索找到的都不一定最优解,A*算法具有完备性且始终找到的是最优解。宽度优先虽然是完备的(如果分支因子有限的话),在任何情况下宽度优先都能找到一个解,但是,它找到的第一个解并非最优的,此外,最坏的情况是,当目标结点是第d层的最后一个被扩展的结点时,它将耗费大量的时间。宽度优先时间复杂度:(b为分支因子,d为深度);空间复杂度为所存储的节点的个数。DFS不是完备的(除非查找空间是有限的),同时,它也不能找到最优解。深度优先的时间复杂度:;空间复杂度:(b为分支因子,m为深度,仅有一枝需要存储);。贪婪算法不是完备的。同时,它找到的解也不一定是最优解。其时间复杂度:(b代表分支数,m为深度);空间复杂度为)。所以只有A*算法和DFS(回溯+剪枝)是完备的,且能够找到最优解;其时间复杂度:扩展节点的数目;空间复杂度:所有生成的结点。综合来看,BFS和贪婪算法的效率较高,但解并非最优,而A*算法的效率稍逊色,但解为最优;DFS(回溯+剪枝)搜索虽能找到最优解但效率最低。源代码//Graph.h#pragmaonceusingnamespacestd;#defineMaxV20/*#ifndefMY_DEBUG#defineMY_DEBUG#endif*/typedefstruct charcityname[20];//城市名 intvalue;//权值 intcost;//A*算法中从当前节点移动到目标节点的预估费用}Ver;classGraphpublic: Graph(); ~Graph();VerV[MaxV]; intedge[MaxV][MaxV]; intnumofedges;//注意这个变量的引用位置 //读取地图节点信息 voidReadVertex(); //读取地图边关系信息 voidReadEdge(); //取与第V个节点的第一个邻接点 intGetFirstVertex(intv); //找到第V1个节点的V2之后的下一个邻接节点 intGetNextVertex(intv1,intv2); intGetVerValue(intindex);//获取V[index]的ver的value值 intGetVerCost(intindex);//获取V[index]的ver的cost值 intGetEdge(introw,intcol);//获取edge[row][col]的值 voidSetVerCost(intindex,intcost);private://Queue.h#pragmaonce#include<iostream>#include"Stack.h"#defineMaxSize30/*#ifndefMY_DEBUG#defineMY_DEBUG#endif/*/classSeqQueuepublic: SeqQueue(); ~SeqQueue(); voidQueueInitiate(); intQueueNotEmpty(); intQueueAppend(intx); intQueueDelete(int*d); intQueueOrderAppend(intx,Graph&G); //A*算法使用 intQueue_A_OrderAppend(intx,Graph&G);private: intqueue[MaxSize]; intrear; intfront; intcount;typedefSeqQueueSeqCQuene;//Romania_Trip.h#pragmaonce#include"Queue.h"typedefstruct intfather; intme;}way;classRomania_Trippublic: Romania_Trip(); ~Romania_Trip(); voidVisit(intv,intu); voidPrint(Graph&graph,way*b,intend,intstart); voidBroadFirstSearch(Graph&graph,intv); voidDepthFirstSearch(Graph&graph,intv,Stack&stack); voidGreedy_Algorithms(Graph&graph,intv); voidAStar_Algorithms(Graph&graph,intv); voidReSet(); intGetCount(); intGetMaxWeight(); intGetEnd(); way*GetB();private: way*b; inti; intend; intcount; intvisitedCity[20]; intMaxWeight; intvisited[20];//Stack.h#pragmaonce#include"Graph.h"#include<iostream>usingnamespacestd;/*#ifndefMY_DEBUG#defineMY_DEBUG#endif*/classStackpublic: Stack(); ~Stack(); boolStackNotFull(); boolStakNotEmpty(); voidStackPop(Graph&G); voidStackPush(intx,Graph&G); voidPrintStack(Graph&G); intGetWeight();private: inta[100]; inttop1; intweight;//Graph.cpp#include"Graph.h"#include<iostream>#include<stdlib.h>#include<fstream>#include<string>usingnamespacestd;Graph::Graph() numofedges=0;Graph::~Graph()voidGraph::ReadVertex() inti=0,v; charch[20]; fstreaminfile("启发式数值.txt",ios::in); while(infile>>ch&&infile>>v)#ifdefMY_DEBUG printf("%s\t%d\n",ch,v);#endif V[i].value=v; V[i].cost=0; strcpy(V[i].cityname,ch); i++;voidGraph::ReadEdge() intvalu,i; fstreaminfile("地图数据表.txt",ios::in); i=0; while(infile>>valu) edge[i/20][i%20]=valu;#ifdefMY_DEBUG if(i%20==0)cout<<endl; cout<<edge[i/20][i%20]<<"\t";#endif i++;//取与第V个节点的第一个邻接点intGraph::GetFirstVertex(intv) if(v<0||v>=20) return-1; for(intcol=0;col<20;col++) if(edge[v][col]>0&&edge[v][col]<1000) returncol; return-1;//找到第V1个节点的V2之后的下一个邻接节点intGraph::GetNextVertex(intv1,intv2) if(v1<0||v1>=20||v2<0||v2>=20) return-1; for(intcol=v2+1;col<20;col++) if(edge[v1][col]>0&&edge[v1][col]<1000) returncol; return-1;intGraph::GetVerValue(intindex)//获取V[index]的ver的values值 returnV[index].value;intGraph::GetVerCost(intindex)//获取V[index]的ver的cost值 returnV[index].cost;intGraph::GetEdge(introw,intcol)//获取edge[row][col]的值 returnedge[row][col];voidGraph::SetVerCost(intindex,intcost){ V[index].cost=cost;//Queue.cpp#include"Queue.h"#include<iostream>#include"Stack.h"SeqQueue::SeqQueue() rear=0; front=0; count=0;SeqQueue::~SeqQueue()intSeqQueue::QueueNotEmpty() if(count!=0)return1; elsereturn0;intSeqQueue::QueueAppend(intx) if(count>0&&rear==front) cout<<"队列已满"<<endl; return0; else queue[rear]=x; rear=(rear+1)%MaxSize; count++; return1;intSeqQueue::QueueDelete(int*d) if(count==0) cout<<"队列已空"<<endl; return0; else *d=queue[front]; front=(front+1)%MaxSize; count--; return1;intSeqQueue::QueueOrderAppend(intx,Graph&G) if(count>0&&rear==front) cout<<"队列已满"<<endl; return0; else if(count==0||G.V[x].value>=G.V[queue[rear-1]].value)//队尾插入 queue[rear]=x; rear=(rear+1)%MaxSize; count++; return1; else if(G.V[x].value<=G.V[queue[front]].value)//队头插入 queue[front-1]=x; front=(front-1+MaxSize)%MaxSize; count++; return1; else//排序找位置插入 intposition=front; while(G.V[x].value>G.V[queue[position]].value) position++; inti; for(i=front;i<position;i++) queue[(i-1+MaxSize)%MaxSize]=queue[i%MaxSize]; queue[(i-1+MaxSize)%MaxSize]=x; front=(front-1+MaxSize)%MaxSize; count++; return1; return0;//A*intSeqQueue::Queue_A_OrderAppend(intx,Graph&G) if(count>0&&rear==front) cout<<"队列已满"<<endl; return0; else intx1=G.V[x].value+G.V[x].cost; intx2=0; if(count!=0)x2=G.V[queue[rear-1]].value+G.V[queue[rear-1]].cost; if(count==0||x1>x2)//队尾插入 queue[rear]=x; rear=(rear+1)%MaxSize; count++; return1; else {//队头插入 if(G.V[x].value+G.V[x].cost<G.V[queue[front]].value+G.V[queue[front]].cost) queue[front-1]=x; front=(front-1+MaxSize)%MaxSize; count++; return1; else//排序找位置插入 intposition=front; while(G.V[x].value+G.V[x].cost> G.V[queue[position%MaxSize]].value+G.V[queue[position%MaxSize]].cost) position++; inti; for(i=front;i<position;i++) queue[(i-1+MaxSize)%MaxSize]=queue[i%MaxSize]; queue[(i-1+MaxSize)%MaxSize]=x; front=(front-1+MaxSize)%MaxSize; count++; return1; return0;/Romania_Trip.cpp#include"Romania_Trip.h"#include<iostream>#include<vector>#include<string>usingnamespacestd;Romania_Trip::Romania_Trip() b=newway[100]; i=0; end=2; count=0; MaxWeight=10000; for(size_ti=0;i<20;i++) visited[i]=0;voidRomania_Trip::ReSet() if(NULL!=b)delete[]b; b=newway[20]; i=0; end=2; count=0; for(size_ti=0;i<20;i++) visited[i]=0;Romania_Trip::~Romania_Trip() if(NULL!=b)delete[]b;voidRomania_Trip::Visit(intv,intu) b[i].father=u; b[i].me=v; i++;voidRomania_Trip::Print(Graph&graph,way*b,intend,intstart) intBway=0; vector<string>CityName; stringname=graph.V[end].cityname; CityName.push_back(name); while(1){ for(intj=0;j<i;j++) if(b[j].me==end) name=graph.V[b[j].father].cityname; CityName.push_back(name); Bway+=graph.edge[b[j].me][b[j].father]; end=b[j].father; if(end==start)break; cout<<"---遍历路径为:"; for(size_ti=CityName.size()-1;i>0;i--) cout<<CityName[i]<<"->"; cout<<"Bucharest"<<endl; cout<<"---路径长度为:"<<Bway<<endl<<"---访问节点数为:"<<count<<endl;//宽度优先算法voidRomania_Trip::BroadFirstSearch(Graph&graph,intv) intu,w;i=0; SeqCQuenequeue; visited[v]=1; count++; if(v==end)return; queue.QueueAppend(v); while(queue.QueueNotEmpty())//队列非空 queue.QueueDelete(&u);//取队列节点 w=graph.GetFirstVertex(u); while(w!=-1)//有子节点的话 if(!visited[w]) Visit(w,u); visited[w]=1; count++; if(w==end) Print(graph,b,end,v); return; queue.QueueAppend(w);//节点压入队列 w=graph.GetNextVertex(u,w);//深度优先算法boolisOK=false;intlevel=0;constintLevel=8;//预设的搜索层次voidRomania_Trip::DepthFirstSearch(Graph&graph,intv,Stack&stack) intw;i=0; if(isOK==true)return; if(level+1>Level)return;//大于搜索层次时不再深入 level++; visited[v]=1;//访问该节点 count++; stack.StackPush(v,graph); if(v==end||stack.GetWeight()>=MaxWeight) w=-1; if(v==end&&stack.GetWeight()<=MaxWeight) cout<<"---深度优先遍历路径为:"; stack.PrintStack(graph); /*if(MaxWeight>stack.GetWeight()) MaxWeight=stack.GetWeight();*/ cout<<"---路径长度为:"<<stack.GetWeight()<<endl <<"---访问节点数为:"<<count<<endl <<"---搜索层次:"<<level<<endl; isOK=true; else w=graph.GetFirstVertex(v);//取当前节点的第一个子节点 while(w!=-1) if(!visited[w]) DepthFirstSearch(graph,w,stack);//递归访问 w=graph.GetNextVertex(v,w);//取当前节点的下一个子节点 visited[v]=0;//返回时置该节点为未访问 stack.StackPop(graph);//将该节点弹出栈,并根据graph中weight的值更改当前栈值 level--;//贪婪算法voidRomania_Trip::Greedy_Algorithms(Graph&graph,intv) intu,w; SeqCQuenequeue;//队列存储图节点在图中的索引值,优先队列,value小的在队头 visited[v]=1; if(v==end){return;} queue.QueueOrderAppend(v,graph);//图节点按优先顺序入队列 count++;//访问节点数+1 while(queue.QueueNotEmpty())//宽度优先,循环 queue.QueueDelete(&u);//删除队列头元素并返回删除的数值 //cout<<"u="<<u<<""; w=graph.GetFirstVertex(u); while(w!=-1) if(!visited[w]) Visit(w,u);//访问w节点,将wayb的指向更新 if(w==end) //cout<<"w==end"; count++; return; queue.QueueOrderAppend(w,graph);//图节点按优先顺序入队列 count++; w=graph.GetNextVertex(u,w);//A*算法voidRomania_Trip::AStar_Algorithms(Graph&graph,intv) //i=0;count=0; intu,w; SeqCQuenequeue; if(v==end)return;//到达终点 queue.Queue_A_OrderAppend(v,graph); count++; while(queue.QueueNotEmpty()) queue.QueueDelete(&u); if(u==end) cout<<"---路径长度为:"<<graph.GetVerCost(u)+graph.GetVerValue(u)<<endl <<"---访问节点数为:"<<count<<endl; return; w=graph.GetFirstVertex(u); while(w!=-1) intcost=graph.GetVerCost(u)+graph.GetEdge(w,u); graph.SetVerCost(w,cost);//设置当前节点移动到目标节点的预估费用 queue.Queue_A_OrderAppend(w,graph);//按预估费用优先入队列 count++; w=graph.GetNextVertex(u,w);intRomania_Trip::GetCount() returncount;intRomania_Trip::GetMaxWeight() returnMaxWeight;intRomania_Trip::GetEnd() returnend;way*Romania_Trip::GetB() returnb;//Source.cpp/*OnholidayinRomania;currentlyinAradFlightleavestomorrowfromBucharestFormulategoal:BeinBucharestFormulateproblemStates:variouscitiesActions:drivebetweencitiesFindsolutionSequenceofcities;e.g.Arad,Sibiu,Fagaras,Bucharest,*/#include"Graph.h"#include"Queue.h"#include"Stack.h"#include"Romania_Trip.h"#include<iostream>#include<ctime>usingnamespacestd;intmain() longinttime1,time2;cout<<endl<<"----------宽度优先算法-------
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年纺织品检验员知识体系试题及答案
- 2024年设计师考试创业方向试题及答案
- 大话2殿试题目及答案
- 2024年纺织品国际市场分析试题及答案
- 助理广告师考试中对广告效果评估的系统性分析研究试题及答案
- 2024年纺织工程师考试的多元视角与试题及答案
- 守护宠物测试题及答案
- 广告市场调研基础知识 试题及答案
- 助理广告师考试技巧和试题及答案分享
- 2024年纺织工程师最易考的知识试题及答案
- 中国网络广告行业十四五发展分析及投资前景与战略规划研究报告2025-2028版
- 2024-2025学年福建省泉州市晋江市安海中学等五校七年级(下)期中数学试卷
- 2025-2030中国建筑智能化工程行业市场发展分析及发展趋势前景研究报告
- 2024年北京邮电大学招聘真题
- 2025-2030有机肥料产业市场深度调研及发展趋势与投资前景研究报告
- 2025-2030创新药CRO行业竞争态势及未来投资趋势预测研究报告
- 北京市通州区马驹桥镇招考笔试真题2024
- 2024年高考数学真题(北京卷)试题试卷原卷答案解析
- 2025年安全生产月主题培训课件:如何查找身边安全隐患
- 2025年高考历史答题技巧与答题模板专题08影响、作用类(答题模版)(学生版+解析)
- 韵达加盟合同协议
评论
0/150
提交评论