




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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);有解,否則無(wú)解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īng)顟B(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)矩陣placetrue20=7;placetrue21=6;placetrue22=5;/MatrixNodeMatrixNode:start(MatrixNodeM_Matrix)/初始矩陣cout<<"請(qǐng)按如下格式輸入初始矩陣(空位用。表示):"<<endl;cout<<"123n456n708"<<endl;cout<<"八數(shù)碼的初始狀態(tài)如下:"
5、;<<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;/初始更新時(shí)深度多加1,應(yīng)該減去M_Matrix.f=M_Matrix.f-1;returnM_Matrix;/boolsolved(MatrixNodeM_Matrix)/判斷是否可解intnum8;inttarget8;inta=0;intb=0;for(intm=0;m<
6、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ù)i
7、f(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_plac
8、e;/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);i
10、f(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;/MatrixNodeMatr
13、ixNode: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_Mat
14、rix)/空格右移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īng)顟B(tài)/查找在位數(shù)/距離和深度加1/估價(jià)值找出空格的橫坐找出空格的縱坐MatrixNodeMatrixNode:updata_m(MatrixNode
15、M_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)
17、returntrue;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(m=9)returnt
18、rue;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(deque
19、<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;Matri
20、xNodemat_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<<"無(wú)法找到路徑!!"<<endl;return;)mat_trn=op
21、enlist.front();/訪問(wèn)第個(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_f
22、ront(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精準(zhǔn)掌握2025年物理考試試題及答案
- 新能源汽車動(dòng)力電池技術(shù)題目及答案
- 家具設(shè)計(jì)的市場(chǎng)戰(zhàn)略考慮試題及答案
- 最難智商測(cè)試題及答案
- 家具行業(yè)多元化設(shè)計(jì)探討試題及答案
- 教師教書(shū)育人反思與策略試題及答案
- 施工圖識(shí)讀與分析試題及答案
- 環(huán)保宣傳面試真題及答案
- 2025南航招聘空姐面試常見(jiàn)問(wèn)題及答案
- 城市軌道交通建設(shè)規(guī)劃與環(huán)境保護(hù)措施研究報(bào)告
- 潮健身let's dance智慧樹(shù)知到期末考試答案章節(jié)答案2024年廣西師范大學(xué)
- 2《歸去來(lái)兮辭并序》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)統(tǒng)編版高中語(yǔ)文選擇性必修下冊(cè)
- 法理斗爭(zhēng)1全文
- 醫(yī)療美容診所規(guī)章制度上墻
- 2024年山東省青島市城陽(yáng)區(qū)中考生物模擬試卷
- 汽車機(jī)械式變速器分類的術(shù)語(yǔ)及定義
- 24春國(guó)家開(kāi)放大學(xué)《建筑測(cè)量》形考任務(wù)實(shí)驗(yàn)1-6參考答案
- 云南省勞務(wù)派遣勞動(dòng)合同書(shū)
- 瑜伽與冥想練習(xí)
- 心臟介入術(shù)后穿刺部位并發(fā)癥的預(yù)防及護(hù)理講解
- 鄰近鐵路營(yíng)業(yè)線施工安全監(jiān)測(cè)技術(shù)規(guī)程 (TB 10314-2021)
評(píng)論
0/150
提交評(píng)論