第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

人工智能—采用狀態(tài)空間法求解八數(shù)碼問題

標簽:
人工智能

八数码难题也称九宫问题,它是在3×3的方格棋盘上,分别放置了表有数字1、2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg,要求程序能输入任意的初始状态和目标状态,要求通过空格来移动八张牌使得棋盘由初始状态到达目标状态。移动规则为:每次只能将与空格(上下左右)相邻的一个数字平移到空格中。
如下图所示,左侧为初始状态,右侧为目标状态
图片描述
在开始求解之前,我们先判断该八数码问题是否有解,判断方法如下:
八数码问题的一个状态实际上是0~9的一个排列,空格用0表示,对于任意给定的初始状态和目标状态,不一定有解,也就是说从初始状态不一定能到达目标状态。因为排列有奇排列和偶排列两类,排列只能在同类排列之间转化,而从奇排列不能转化成偶排列或相反。
如果一个数字0~8的随机排列871526340,用F(X)表示数字X前面比它小的数的个数,全部数字的F(X)之和为Y=∑(F(X)),如果Y为奇数则称原数字的排列是奇排列,如果Y为偶数则称原数字的排列是偶排列。
例:871526340这个排列的Y=0+0+0+1+1+3+2+3+0=10,10是偶数,所以是偶排列。
871625340,Y=0+0+0+1+1+2+2+3+0=9,9是奇数,所以是奇排列。
因此,可以在运行程序前检查初始状态和目标状态的排列是否相同,相同则问题可解,接着采用搜索算法求解,否则无解。
我们可以采用广度优先算法来进行求解,大致流程如下
图片描述
附上一部分代码,有兴趣的同学可以自己尝试
%查询是否找到目标节点

function a=getit(close,dis)  
global i;  
 for j=1:i  
     if close(j).con==dis  
         a=1;  
         break;  
     else  
         a=0;  
     end  
 end  
end 

上下左右移动模块

function open=opera(op,cl,f,dis)  
global i;  
  
[x,y]=find(f.con==0);  
if x==1&&y==1  
    open=rt(f,op,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==1&&y==2  
    open=lt(f,op,cl,dis);  
    open=rt(f,open,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==1&&y==3  
    open=lt(f,op,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==2&&y==1  
    open=up(f,op,cl,dis);  
    open=rt(f,open,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==2&&y==2  
    open=lt(f,op,cl,dis);  
    open=up(f,open,cl,dis);  
    open=rt(f,open,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==2&&y==3  
    open=lt(f,op,cl,dis);  
    open=up(f,open,cl,dis);  
    open=dn(f,open,cl,dis);  
elseif x==3&&y==1  
    open=up(f,op,cl,dis);  
    open=rt(f,open,cl,dis);  
elseif x==3&&y==2  
    open=lt(f,op,cl,dis);  
    open=up(f,open,cl,dis);  
    open=rt(f,open,cl,dis);  
elseif x==3&&y==3  
    open=lt(f,op,cl,dis);  
    open=up(f,open,cl,dis);  
end  
end  

查询重复操作模块

function []=search(f,op,cl)  
global e;  
global i;  
%e  
%open(e-1).con  
for j=1:e-1  
    if  op(j).con==f.con  
        e=e-1;  
        break  
    end  
end  
  
for j=1:i-1  
    if cl(j).con==f.con  
        e=e-1;  
        break;  
    end  
end  
end 

最后附上不完全效果图
图片描述

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
Linux系統(tǒng)工程師
手記
粉絲
7200
獲贊與收藏
414

關(guān)注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消