迷宫路径搜索人工智能文档格式.docx
- 文档编号:22670488
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:22
- 大小:239.13KB
迷宫路径搜索人工智能文档格式.docx
《迷宫路径搜索人工智能文档格式.docx》由会员分享,可在线阅读,更多相关《迷宫路径搜索人工智能文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
voidseqqueue:
:
iniqueue(seqqueue&
q)//初始化队列
q.front=q.rear=maxsize-1;
}
enqueue(seqqueue&
q,_opens)//进队列
if((q.rear+1)%maxsize==q.front)
{
AfxMessageBox("
溢出!
无法完成该动作。
"
}
else
q.rear=(q.rear+1)%maxsize;
q.queue[q.rear].father=s.father;
q.queue[q.rear].self=s.self;
}
dlqueue(seqqueue&
q)//出队列
if(q.rear==q.front)AfxMessageBox("
空队列!
q.front=(q.front+1)%maxsize;
_openseqqueue:
getthead(seqqueue&
q)//获得队头元素
if(q.rear==q.front)
无法完成该动作"
returnq.queue[q.front];
returnq.queue[(q.front+1)%maxsize];
boolseqqueue:
empty(seqqueue&
q)//判断是否为空
returntrue;
returnfalse;
(2)seqstack类
struct_close
classseqstack
_closestack[100];
inttop;
voidinistack(seqstack&
voidpush(seqstack&
_closex);
voidpop(seqstack&
_closegettop(seqstack&
boolempty(seqstack&
voidseqstack:
inistack(seqstack&
s)
s.top=0;
s.stack[s.top].father=0;
s.stack[s.top].self=0;
push(seqstack&
s,_closex)
if(s.top==99-1)
栈溢出!
sdfasdfasf"
NULL,MB_OK);
s.top++;
stack[s.top]=x;
pop(seqstack&
if(s.top==0)AfxMessageBox("
空栈!
无法完成此动作。
else
s.top--;
_closeseqstack:
gettop(seqstack&
if(s.top==0)
无可获取元素。
returns.stack[0];
returns.stack[s.top];
boolseqstack:
empty(seqstack&
(3)主要参数
(4)主要时间函数
voidCMY_MISSINGDlg:
OnOK()
//TODO:
Addextravalidationhere
//if(clicked=true)
//{
//初始化邻接矩阵
for(inti=0;
i<
9;
i++)
for(intj=0;
j<
j++)
{
JV_ZHEN[i][j]=0;
}
//邻接矩阵的变换
CButton*pBtn;
for(intt=0;
t<
12;
t++)
{
pBtn=(CButton*)GetDlgItem(CheckBox[t]);
if(t==0)
if(pBtn->
GetCheck())
{
JV_ZHEN[0][1]=1;
JV_ZHEN[1][0]=1;
}
else
JV_ZHEN[0][1]=0;
JV_ZHEN[1][0]=0;
if(t==1)
JV_ZHEN[1][2]=1;
JV_ZHEN[2][1]=1;
else
JV_ZHEN[1][2]=0;
JV_ZHEN[2][1]=0;
if(t==2)
JV_ZHEN[0][3]=1;
JV_ZHEN[3][0]=1;
JV_ZHEN[0][3]=0;
JV_ZHEN[3][0]=0;
}
if(t==3)
JV_ZHEN[1][4]=1;
JV_ZHEN[4][1]=1;
JV_ZHEN[1][4]=0;
JV_ZHEN[4][1]=0;
if(t==4)
JV_ZHEN[2][5]=1;
JV_ZHEN[5][2]=1;
JV_ZHEN[2][5]=0;
JV_ZHEN[5][2]=0;
if(t==5)
JV_ZHEN[3][4]=1;
JV_ZHEN[4][3]=1;
JV_ZHEN[3][4]=0;
JV_ZHEN[4][3]=0;
if(t==6)
JV_ZHEN[4][5]=1;
JV_ZHEN[5][4]=1;
JV_ZHEN[4][5]=0;
JV_ZHEN[5][4]=0;
if(t==7)
JV_ZHEN[3][6]=1;
JV_ZHEN[6][3]=1;
JV_ZHEN[3][6]=0;
JV_ZHEN[6][3]=0;
if(t==8)
JV_ZHEN[4][7]=1;
JV_ZHEN[7][4]=1;
JV_ZHEN[4][7]=0;
JV_ZHEN[7][4]=0;
if(t==9)
JV_ZHEN[5][8]=1;
JV_ZHEN[8][5]=1;
JV_ZHEN[5][8]=0;
JV_ZHEN[8][5]=0;
if(t==10)
JV_ZHEN[6][7]=1;
JV_ZHEN[7][6]=1;
JV_ZHEN[6][7]=0;
JV_ZHEN[7][6]=0;
if(t==11)
JV_ZHEN[7][8]=1;
JV_ZHEN[8][7]=1;
JV_ZHEN[7][8]=0;
JV_ZHEN[8][7]=0;
}
//输出邻接矩阵
CStringstr="
;
CStringf_str;
for(intp=0;
p<
p++)
for(intq=0;
q<
q++)
str.Format("
%3d"
JV_ZHEN[p][q]);
f_str=f_str+str;
f_str=f_str+"
\n"
}
GetDlgItem(IDC_JVZHEN)->
SetWindowText(f_str);
//MessageBox(f_str,NULL,MB_OK);
open.iniqueue(open);
m_stack.inistack(m_stack);
CStringss="
//open表操作
if(f_open.self==0)MessageBox("
你还没有设置初始位置!
else{
array_xiabiao=0;
array_open[array_xiabiao]=f_open;
open.enqueue(open,f_open);
//初始节点入队
close_piont=0;
_opentemp;
do
_openr_open=open.getthead(open);
//准备出队,获取队首元素
//将open表内出来的元素进入close中;
_closef_close;
f_close.father=r_open.father;
f_close.self=r_open.self;
close[close_piont]=f_close;
//进入close表
close_piont++;
array_open[0]=r_open;
temp=r_open;
//如果出OPEN表的元素有扩展节点
for(int_l=0;
_l<
_l++)
if(JV_ZHEN[temp.self-1][_l]==1)
array_xiabiao++;
f_open.father=temp.self;
f_open.self=_l+1;
array_open[array_xiabiao]=f_open;
for(inti=0;
array_xiabiao;
{
if(array_open[i].self==f_open.self)
{
array_cunzai=true;
break;
}
else
array_cunzai=false;
}
if(array_cunzai==false)
open.enqueue(open,f_open);
//open.enqueue(open,f_open);
open.dlqueue(open);
}while(open.empty(open)==false&
&
close[close_piont-1].self!
=9);
//如果open表为空了
if(open.empty(open)==true&
=9)
MessageBox("
没有路径!
搜索不成功。
//搜索到路径
if(close[close_piont-1].self==9)
you路径!
搜索成功。
m_stack.push(m_stack,close[close_piont-1]);
//close表的最后一个元素进栈
_closec_temp;
c_temp=close[close_piont-1];
//记录路径节点
for(inti=0;
10;
if(close[i].self==c_temp.father&
close[i].self!
=0)
{
m_stack.push(m_stack,close[i]);
c_temp=close[i];
i=-1;
}
CStringstr="
//用于输出路径
do
{
CStrings;
c_temp=m_stack.gettop(m_stack);
m_stack.pop(m_stack);
s.Format("
%2d"
c_temp.self);
str=str+s;
}while(m_stack.empty(m_stack)==false);
路径是:
+str,NULL,MB_OK);
clicked=false;
//}
//else
//MessageBox("
请先确定初始化初始点!
//}
CDialog:
OnOK();
BOOLCMY_MISSINGDlg:
Create(LPCTSTRlpszClassName,LPCTSTRlpszWindowName,DWORDdwStyle,constRECT&
rect,CWnd*pParentWnd,UINTnID,CCreateContext*pContext)
Addyourspecializedcodehereand/orcallthebaseclass
returnCDialog:
Create(IDD,pParentWnd);
OnButton10()
Addyourcontrolnotificationhandlercodehere
f_open.father=0;
f_open.self=m_firstroom;
if(f_open.self!
if(f_open.self<
10)
{
MessageBox("
起始加点已经成功初始化!
elseMessageBox("
输入的数值有误!
elseMessageBox("
请在初始位置编辑框输入对应的值!
clicked=true;
【运行调试】
【运行结果】
【心得体会】
为期两周的实验,首先由open表和closed表的结构体设计,在最后到队列的这个类的设计,然后逐步的求得出实验目标。
这其中遇到过一些问题,比如像节点对象的设置等,但通过老师的讲解突然有一种豁然开朗的感觉,这也导致了后来编写程序比较顺利。
通过这次试验,对于广度优先搜索算法已有了一个清晰的思路,同时对C++6.0环境也有了进一步的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 路径 搜索 人工智能