大工21春《人工智能》大作业答案.docx

上传人:b****2 文档编号:2130807 上传时间:2023-05-02 格式:DOCX 页数:12 大小:41.68KB
下载 相关 举报
大工21春《人工智能》大作业答案.docx_第1页
第1页 / 共12页
大工21春《人工智能》大作业答案.docx_第2页
第2页 / 共12页
大工21春《人工智能》大作业答案.docx_第3页
第3页 / 共12页
大工21春《人工智能》大作业答案.docx_第4页
第4页 / 共12页
大工21春《人工智能》大作业答案.docx_第5页
第5页 / 共12页
大工21春《人工智能》大作业答案.docx_第6页
第6页 / 共12页
大工21春《人工智能》大作业答案.docx_第7页
第7页 / 共12页
大工21春《人工智能》大作业答案.docx_第8页
第8页 / 共12页
大工21春《人工智能》大作业答案.docx_第9页
第9页 / 共12页
大工21春《人工智能》大作业答案.docx_第10页
第10页 / 共12页
大工21春《人工智能》大作业答案.docx_第11页
第11页 / 共12页
大工21春《人工智能》大作业答案.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

大工21春《人工智能》大作业答案.docx

《大工21春《人工智能》大作业答案.docx》由会员分享,可在线阅读,更多相关《大工21春《人工智能》大作业答案.docx(12页珍藏版)》请在冰点文库上搜索。

大工21春《人工智能》大作业答案.docx

大工21春《人工智能》大作业答案

学习中心:

奥鹏远程教育青岛学习中心(直属)[25]

专业:

计算机科学与技术

年级:

19年秋季

学号:

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

学生:

王希龙

题目:

题目五:

广度优先搜索算法

1.谈谈你对本课程学习过程中的心得体会与建议?

《人工智能》是计算机专业的专业课之一。

本课程主要介绍如何用计算机来模拟人类智能,如何用计算机实现诸如问题求解、规划推理、模式识别、知识工程、自然语言处理、机器学习等只有人类才具备的智能,使得计算机更好的为人类服务。

该课程是计算机科学理论基础研究的重要组成部分,是计算机科学技术专业的专业拓展课,适合计算机专业人员使用。

该课程是计算机科学理论基础研究的重要组成部分,是计算机科学技术专业的专业拓展课,适合计算机专业人员使用。

这门课程需要学生掌握人工智能的基本概念、基本方法,会用知识表示方法、推理方法和机器学习等方法求解简单问题。

2.《人工智能》课程设计,从以下5个题目中任选其一作答。

《人工智能》课程设计

题目五:

广度优先搜索算法

要求:

(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码)章节。

(2)算法思路:

简单介绍该算法的基本思想,至少100字。

(3)算法程序框图:

绘制流程图或原理图,从算法的开始到结束的程序框图。

(4)主要函数代码:

列出算法的具体代码。

(5)简单描述在人工智能的哪些领域需要使用广度优先搜索算法。

答:

人工智能(ArtificialIntelligence,简记为AI)是当前科学技术迅速发展及新思想、新理广度优先搜索,即BFS(BreadthFirstSearch),是一种相当常用的图算法,其特点是:

每次搜索指定点,并将其所有未访问过的邻近节点加入搜索队列,循环搜索过程直到队列为空。

算法描述如下:

(1)将起始节点放入队列尾部

(2)While(队列不为空)

取得并删除队列首节点Node

处理该节点Node

把Node的未处理相邻节点加入队列尾部

#include"stdafx.h"

#include//构造有向图p162,无向图p168

#include

#include

#include//包含exit函数//////////////////////////////广度优先

#defineNull0//////////////////////////////广度优先

#defineINFINITY10000//最大值,无穷

#defineMAX_VERTEX_NUM20//最大顶点个数,即可以计算的最大规模

typedefstructArcCell

{

floatadj;//无权图为1或0,有权图为权重

charinfo[30];//该弧相关信息

}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedefstruct

{

charvexs[MAX_VERTEX_NUM][20];//顶点向量,如v1,v2,...等

AdjMatrixarcs;

intvexnum,arcnum;

}MGraph;

//////////////////////////////广度优先

typedefstructQNode

{

intdata;

structQNode*next;

}QNode,*QueuePtr;

typedefstruct

{

QueuePtrfront;//队头指针

QueuePtrrear;//队尾指针

}LinkQueue;

//////////////////////////////广度优先

 

intLocateVex(MGraphG,char*v)

{

inti,num=-1;

for(i=0;i

{

if(strcmp(v,G.vexs[i])==0)//相等时为0,大于为正,小于为负

{

num=i;

break;

}

}

if(num<0)

{

cout<<"没有匹配的顶点,输入错误!

"<

return-1;

}

else

returnnum;

}

voidCreateNet(MGraph&G)

{

inti,j,k,s=0;

intIncInfo=-1;//IncInfo为0则各弧不含其它信息,有信息则为其他数字

charv[2][20];//存放一条边的两个顶点

char*p;

floatw;//输入的权重

intdirect=-1;//有向图为1,无向图为其他数字

//chartemp[100][20];//这个temp不能放到本函数内,or,G.vexs[i]引用他时,赋了值,跳出这个函数就没有值.这样不好

//scanf(&G.vexnum,&G.arcnum,&IncInfo);

cout<<"构建有向图请输入数字1,构建无向图请输入其他数字(无向图请输入上三角的边)."<

cin>>direct;

cout<<"各顶点无信息则输入数字0,有信息输入其他数字."<

cin>>IncInfo;

cout<<"请输入顶点和弧数目:

"<

cin>>G.vexnum>>G.arcnum;

cout<<"请输入"<

for(i=0;i

{

p=G.vexs[i];

cin>>p;//注意vexs[MAX_VERTEX_NUM]中的MAX_VERTEX_NUM大于G.vexnum

}

for(i=0;i

{

cout<

}

for(i=0;i

{

for(j=0;j

{

G.arcs[i][j].adj=INFINITY;

p=G.arcs[i][j].info;

p='\0';///////////////////////////////问题

}

}

for(k=0;k

{

cout<<"第"<

"<

cout<<"出发点:

";

p=v[0];

cin>>p;

i=LocateVex(G,p);

cout<<"接受点:

";

p=v[1];

cin>>p;

j=LocateVex(G,p);

cout<<"权重:

";

cin>>w;//输入格式:

v1v218

cout<<"i="<

G.arcs[i][j].adj=w;

if(IncInfo)

{

cout<<"输入信息:

";

p=G.arcs[i][j].info;

cin>>p;

}

if(direct!

=1)

G.arcs[j][i]=G.arcs[i][j];

}

cout<<"顶点数是:

"<

cout<<"弧数是:

"<

cout<<"各顶点分别是:

";

for(i=0;i

cout<

cout<

for(i=0;i

{

for(j=0;j

{

cout<

if(IncInfo)

{

if(G.arcs[i][j].adj!

=INFINITY)

cout<

else

cout<

}

}

cout<

}

}

////////////////////////////////////////////////////////////////////广度优先

boolvisited[100];//随便设置一百个布尔值

voidInitQueue(LinkQueue&Q)

{

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!

Q.front)

exit(-1);

Q.front->next=Null;

}

voidEnQueue(LinkQueue&Q,inte)

{

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)

exit(-1);

p->data=e;

p->next=Null;

Q.rear->next=p;

Q.rear=p;

}

voidDeQueue(LinkQueue&Q,int&e)

{

QueuePtrp;

if(Q.front==Q.rear)

cout<<"队头等于队尾!

"<

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)

Q.rear=Q.front;

free(p);

}

intQueueEmpty(LinkQueue&Q)

{

if(Q.front==Q.rear)

return1;

else

return0;

}

voidvisit(MGraphG,intv)

{

cout<<"访问了第"<

cout<<"即"<

}

intFirstAdjVex(MGraphG,intv)

{

inti,num=-1;

for(i=0;i

{

if(G.arcs[v][i].adj!

=INFINITY)

{

num=i;

break;

}

}

returnnum;

}

intNextAdjVex(MGraphG,intv,intw)

{

inti,num=-1;

for(i=w+1;i

{

if(G.arcs[v][i].adj!

=INFINITY)

{

num=i;

break;

}

}

returnnum;

}

voidBFSTraverse(MGraphG)

{

intv;

intu;//出队元素

intw;

LinkQueueQ;

for(v=0;v

visited[v]=0;

InitQueue(Q);

for(v=0;v

{

if(!

visited[v])

{

visited[v]=1;

visit(G,v);

EnQueue(Q,v);

while(!

QueueEmpty(Q))

{

DeQueue(Q,u);

for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))

{

if(!

visited[w])

{

visited[w]=1;

visit(G,w);

EnQueue(Q,w);

}

}

}

}

}

}

///////////////////////////广度优先

voidmain()

{

MGraphG;

CreateNet(G);

//这时上面已经求出G.vexnum即顶点个数

BFSTraverse(G);

}

使用该算法注意的问题:

(1)使用该算法关键的数据结构为:

队列,队列保证了广度渡优先,并且每个节点都被处理到;

(2)新加入的节点一般要是未处理过的,所以某些情况下最初要对所有节点进行标记;(3)广度优先在实际使用时,很对情况已超出图论的范围,将新节点加入队列的条件不再局限于相邻节点这个概念。

例如,使用广度优先的网络爬虫在抓取网页时,会把一个链接指向的网页中的所URL加入队列供后续处理。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2