![人工智能A星算法(C++)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/74b1663d-d4b7-452c-83f4-b734e253eac3/74b1663d-d4b7-452c-83f4-b734e253eac31.gif)
![人工智能A星算法(C++)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/74b1663d-d4b7-452c-83f4-b734e253eac3/74b1663d-d4b7-452c-83f4-b734e253eac32.gif)
![人工智能A星算法(C++)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/74b1663d-d4b7-452c-83f4-b734e253eac3/74b1663d-d4b7-452c-83f4-b734e253eac33.gif)
![人工智能A星算法(C++)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/74b1663d-d4b7-452c-83f4-b734e253eac3/74b1663d-d4b7-452c-83f4-b734e253eac34.gif)
![人工智能A星算法(C++)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/74b1663d-d4b7-452c-83f4-b734e253eac3/74b1663d-d4b7-452c-83f4-b734e253eac35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include<iostream>#include<deque>#include<algorithm>#include<iterator>usingnamespacestd;#defineM3classMatrixNodepublic:intm;intd;intp;intf;intplaceMM;intplacetrueMM;intkong_x;intkong_y;/定義MatrixNode類/在位個(gè)數(shù)深度/牌與其目標(biāo)位置直接步數(shù)之和/f=d+p,估價(jià)函數(shù)/當(dāng)前矩陣目標(biāo)矩陣/空位的橫坐標(biāo)空位的縱坐標(biāo)/public:MatrixNode();Ma
2、trixNodestart(MatrixNodeM_Matrix);intTruePlace(MatrixNodeT_place);intp_place(MatrixNodeP_place);intf_kongx(MatrixNodefind_kongx);intf_kongy(MatrixNodefind_kongy);boolsolved(MatrixNodeM_Matrix);有解,否則無解MatrixNodeup_move(MatrixNodeM_Matrix);MatrixNodedown_move(MatrixNodeM_Matrix);MatrixNodeleft_move(Ma
3、trixNodeM_Matrix);MatrixNoderight_move(MatrixNodeM_Matrix);MatrixNodeupdata_m(MatrixNodeM_Matrix);/初始矩陣/查找在位數(shù)/坐標(biāo)差絕對(duì)值之和找出空格的橫坐標(biāo)/找出空格的縱坐標(biāo)判斷是否有解,奇偶性相同則/空格上移/空格下移/空格左移/空格右移/移動(dòng)后更新狀態(tài)MatrixNodeparents(deque<MatrixNode>ilist,MatrixNodeM_Matrix);該節(jié)點(diǎn)的父親找到;:MatrixNode:MatrixNode()placetrue00=1;placetrue0
4、1=2;placetrue02=3;placetrue10=8;placetrue11=-1;placetrue12=4;/目標(biāo)矩陣/初始矩陣"<<endl;/初始更新時(shí)深度多加判斷是否可解/不考慮空格placetrue20=7;placetrue21=6;placetrue22=5;/MatrixNodeMatrixNode:start(MatrixNodeM_Matrix)cout<<"請(qǐng)按如下格式輸入初始矩陣(空位用0表示):cout<<"123n456n708"<<endl;cout<<
5、"八數(shù)碼的初始狀態(tài)如下:"<<endl;for(inta=0;a<M;a+)for(intb=0;b<M;b+)cin>>M_Matrix.placeab;M_Matrix.d=0;M_Matrix=M_Matrix.updata_m(M_Matrix);M_Matrix.d=M_Matrix.d-1;1,應(yīng)該減去M_Matrix.f=M_Matrix.f-1;returnM_Matrix;/boolsolved(MatrixNodeM_Matrix)intnum8;inttarget8;inta=0;intb=0;for(intm=0;
6、m<M;m+)for(intn=0;n<M;n+)if(M_Matrix.placemn!=0)numa+=M_Matrix.placemn;if(M_Matrix.placetruemn!=-1)targetb+=M_Matrix.placetruemn;inti,j;intcount_num=0,count_target=0;for(i=0;i<(8-1);i+)for(j=i+1;j<8;j+)if(numj<numi)count_num+;if(targetj<targeti)count_target+;0)|(count_num%2/查找在位數(shù)if
7、(count_num%2=0&&count_target%2=1&&count_target%2=1)returntrue;elsereturnfalse;/intMatrixNode:TruePlace(MatrixNodeT_place)T_place.m=0;intNumT_place=0;for(inti=0;i<M;i+)for(intj=0;j<M;j+)if(T_place.placeij=placetrueij)T_place.m=T_place.m+1;NumT_place=NumT_place+1;returnNumT_place
8、;/intMatrixNode:p_place(MatrixNodeP_place)/坐標(biāo)差的絕對(duì)值之和P_place.p=0;intnum=0;for(intPa=0;Pa<M;Pa+)for(intPb=0;Pb<M;Pb+)if(P_place.placePaPb=1)P_place.p=P_place.p+(abs(Pa-0)+abs(Pb-0);if(P_place.placePaPb=2)P_place.p=P_place.p+(abs(Pa-0)+abs(Pb-1);if(P_place.placePaPb=3)P_place.p=P_place.p+(abs(Pa-
9、0)+abs(Pb-2);if(P_place.placePaPb=4)P_place.p=P_place.p+(abs(Pa-1)+abs(Pb-2);if(P_place.placePaPb=5)P_place.p=P_place.p+(abs(Pa-2)+abs(Pb-2);/返回空格橫坐標(biāo)/返回空格縱坐標(biāo)/空格上移/num 為交換if(P_place.placePaPb=6)P_place.p=P_place.p+(abs(Pa-2)+abs(Pb-1);if(P_place.placePaPb=7)P_place.p=P_place.p+(abs(Pa-2)+abs(Pb-0);if
10、(P_place.placePaPb=8)P_place.p=P_place.p+(abs(Pa-1)+abs(Pb-0);num=P_place.p;returnnum;/intMatrixNode:f_kongx(MatrixNodefind_kongx)intnum;for(inti=0;i<M;i+)for(intj=0;j<M;j+)if(find_kongx.placeij=0)num=i;returnnum;/intMatrixNode:f_kongy(MatrixNodefind_kongy)intnum;for(inti=0;i<M;i+)for(intj=
11、0;j<M;j+)if(find_kongy.placeij=0)num=j;returnnum;/MatrixNodeMatrixNode:up_move(MatrixNodeM_Matrix)intnum;的中間變量MatrixNodeup_m=M_Matrix;num=up_m.placeup_m.kong_xup_m.kong_y;up_m.placeup_m.kong_xup_m.kong_y=up_m.placeup_m.kong_x-1up_m.kong_y;up_m.placeup_m.kong_x-1up_m.kong_y=num;up_m=up_m.updata_m(
12、up_m);returnup_m;/MatrixNodeMatrixNode:down_move(MatrixNodeM_Matrix)/空格下移intnum;MatrixNodeup_m=M_Matrix;num=up_m.placeup_m.kong_xup_m.kong_y;up_m.placeup_m.kong_xup_m.kong_y=up_m.placeup_m.kong_x+1up_m.kong_y;up_m.placeup_m.kong_x+1up_m.kong_y=num;up_m=up_m.updata_m(up_m);returnup_m;/MatrixNodeMatri
13、xNode:left_move(MatrixNodeM_Matrix)/空格左移intnum;MatrixNodeup_m=M_Matrix;num=up_m.placeup_m.kong_xup_m.kong_y;up_m.placeup_m.kong_xup_m.kong_y=up_m.placeup_m.kong_xup_m.kong_y-1;up_m.placeup_m.kong_xup_m.kong_y-1=num;up_m=up_m.updata_m(up_m);returnup_m;/MatrixNodeMatrixNode:right_move(MatrixNodeM_Matr
14、ix)/空格右移intnum;MatrixNodeup_m=M_Matrix;num=up_m.placeup_m.kong_xup_m.kong_y;up_m.placeup_m.kong_xup_m.kong_y=up_m.placeup_m.kong_xup_m.kong_y+1;up_m.placeup_m.kong_xup_m.kong_y+1=num;up_m=up_m.updata_m(up_m);returnup_m;/移動(dòng)后更新狀態(tài)/查找在位數(shù)/距離和深度加1/估價(jià)值找出空格的橫坐找出空格的縱坐MatrixNodeMatrixNode:updata_m(MatrixNodeM
15、_Matrix)MatrixNodeup_m=M_Matrix;up_m.m=up_m.TruePlace(up_m);up_m.p=up_m.p_place(up_m);up_m.d=M_Matrix.d+1;up_m.f=up_m.p+up_m.d;up_m.kong_x=up_m.f_kongx(up_m);up_m.kong_y=up_m.f_kongy(up_m);returnup_m;/boolfather(deque<MatrixNode>ilist,MatrixNodeM_Matrix)/尋找父節(jié)點(diǎn)MatrixNodeM_Matrix1=ilist.front();
16、MatrixNodeup_m;intm;up_m=M_Matrix1.up_move(M_Matrix1);m=0;for(inta1=0;a1<M;a1+)for(intb1=0;b1<M;b1+)if(up_m.placea1b1=M_Matrix.placea1b1)m+;if(m=9)returntrue;up_m=M_Matrix1.down_move(M_Matrix1);m=0;for(inta2=0;a2<M;a2+)for(intb2=0;b2<M;b2+)if(up_m.placea2b2=M_Matrix.placea2b2)m+;if(m=9)r
17、eturntrue;up_m=M_Matrix1.left_move(M_Matrix1);m=0;for(inta3=0;a3<M;a3+)for(intb3=0;b3<M;b3+)/輸出矩陣/檢查新生成的if(up_m.placea3b3=M_Matrix.placea3b3)m+;if(m=9)returntrue;up_m=M_Matrix1.right_move(M_Matrix1);m=0;for(inta4=0;a4<M;a4+)for(intb4=0;b4<M;b4+)if(up_m.placea4b4=M_Matrix.placea4b4)m+;if(
18、m=9)returntrue;elsereturnfalse;/voidprintMatrix(constMatrixNodeMatrix)for(inti=0;i<M;i+)for(intj=0;j<M;j+)cout<<Matrix.placeij<<","cout<<endl;cout<<endl;/boolless_f(constMatrixNodeM_Matrix1,constMatrixNodeM_Matrix2)returnM_Matrix1.f<M_Matrix2.f;/boollookout
19、(deque<MatrixNode>ilist,MatrixNodeM_Matrix)節(jié)點(diǎn)是否已擴(kuò)展deque<MatrixNode>:iteratorVi=ilist.begin();inti,j,m;while(Vi!=ilist.end()m=0;for(i=0;i<M;i+)for(j=0;j<M;j+)if(*Vi).placeij=M_Matrix.placeij)m+;if(m=9)returntrue;/不是新擴(kuò)展的Vi+;)returnfalse;是新擴(kuò)展的)=voidmain()intstep=0;MatrixNodemat;Matrix
20、Nodemat_trn;MatrixNodemat_trn1;MatrixNodemat_trn2;MatrixNodemat_trn3;MatrixNodemat_trn4;MatrixNodeparent;mat=mat.start(mat);deque<MatrixNode>openlist;openlist.push_front(mat);deque<MatrixNode>closedlist;if(solved(mat)=false)cout<<"無法找到路徑!!"<<endl;return;)mat_trn=ope
21、nlist.front();/訪問第個(gè)元素while(mat_trn.m!=8)closedlist.push_front(mat_trn);openlist.pop_front();/刪除第一個(gè)元素/向上移mat_trn1=mat_trn;if(mat_trn1.f_kongx(mat_trn1)>=1)mat_trn1=mat_trn1.up_move(mat_trn1);if(lookout(openlist,mat_trn1)=false&&lookout(closedlist,mat_trn1)=false)/檢查新節(jié)點(diǎn)是否已擴(kuò)展openlist.push_fr
22、ont(mat_trn1);)/向下移mat_trn2=mat_trn;if(mat_trn2.f_kongx(mat_trn2)<=1)mat_trn2=mat_trn2.down_move(mat_trn2);if(lookout(openlist,mat_trn2)false&&lookout(closedlist,mat_trn2)false)/檢查新節(jié)點(diǎn)是否已擴(kuò)展openlist.push_front(mat_trn2);/向左移mat_trn3=mat_trn;if(mat_trn3.f_kongy(mat_trn3)>=1)mat_trn3=mat_trn3.left_move(mat_trn3);if(lookout(openlist,mat_trn3)=false&&false)/檢查新節(jié)點(diǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年債權(quán)管理與轉(zhuǎn)讓策劃合同樣本
- 2025年企業(yè)供應(yīng)鏈物流外包項(xiàng)目協(xié)議
- 2025年債權(quán)讓與四方合同策劃范本
- 2025年倉庫管理員職責(zé)與待遇合同
- 2025年具有法律效力的個(gè)人投資對(duì)賭協(xié)議
- 2025年電子點(diǎn)火沼氣燈項(xiàng)目申請(qǐng)報(bào)告模范
- 2025年熱熔膠膠粉及膠粒項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模范
- 2025年雙方教育合作框架協(xié)議
- 2025年冬季社會(huì)實(shí)踐活動(dòng)協(xié)議范本
- 2025年教育實(shí)踐基地聯(lián)盟發(fā)展與協(xié)作策劃協(xié)議
- 糾正冤假錯(cuò)案申訴范文
- 鋰離子電池串并聯(lián)成組優(yōu)化研究
- 人教版小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)第1-4單元教材分析
- JTS-215-2018碼頭結(jié)構(gòu)施工規(guī)范
- 大酒店風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理雙體系文件
- 財(cái)務(wù)實(shí)習(xí)生合同
- 2024年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫含答案
- 2024年長沙衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫含答案
- 地質(zhì)災(zāi)害危險(xiǎn)性評(píng)估的基本知識(shí)
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規(guī)范
- 重慶市2023年中考道德與法治試卷(A卷)(附真題答案)
評(píng)論
0/150
提交評(píng)論