設計簡單的智慧型蛇

2021-08-14 03:02:00 字數 1505 閱讀 1597

智慧型蛇是讓貪吃蛇在有限的地圖內走動,吃食物使身體變長使得能夠走的步數最多。
既然是讓步數最多,又由於對問題的簡化局面中每次只會有乙個食物,且無除邊界外的障礙物。

可以想到比較 trick 的做法,當行數 n 或列數 m 為偶數時,可以構造哈密頓迴路使得蛇必定可以在鋪滿整個地圖後結束遊戲。

當行數和列數都為奇數時,不存在哈密頓迴路。所以只能設計估價函式來判斷當前蛇應該走的方向。

乙個比較簡單容易想到的估價函式是,讓蛇往最短路的方向走,並盡量讓蛇走上一次移動的方向。

下面的**執行時會讓你輸入行數 n 和列數 m ,然後就可以看到智慧型(障)蛇了。
//蛇長度初始是5 h代表蛇的頭部 x是蛇的身體

//輸入行數為 n 列數為 m

//0 1 2 3 分別代表右下左上

#include

#define inf 1e9

#define rep(i,l,r) for (int i=l;i<=r;i++)

using

namespace

std;

int n,m,mcnt=0,x=1,y=5,pre,rx,ry,len=5;

struct node;

queue

q;char map[1005][1005];

void makemap());

map[1][5]='h'; q.push((node));

}void init()

rep(i,0,n+1)

}int dx[4]=,dy[4]=;

int solve(int i) else mcnt--,len++;

map[x][y]='x';

map[xx][yy]='h'; q.push((node)); x=xx; y=yy;

return1;}

void trick()

if (x==1&&y==1)

if (y==1) solve(3);

else

else

if (y==m)

else

}}void trick2()

if (x==2&&y==1)

if (x==1) solve(0);

else

else

if (x==n)

else

if (!solve(1)) solve(3);

}}int main()

if ((m&1)==0)

if (abs(xx-rx)+abs(yy-ry)' '||map[xx][yy]=='m'))

rep(i,0,3)

}solve(mni); pre=mni;

if (mni==-1)

o:;if (len==n*m)

system("cls");

}

}

智慧型蛇設計思路

有了乙個基本框架的貪吃蛇,智慧型蛇的實現其實只需要寫出乙個函式替代getinp 函式並每秒執行一次即可 下面著重講下搜尋策略 方案1.0 在乙個矩形中,每一時刻有乙個食物,貪吃蛇要在不撞到自己的條件下,找到一條路 未必要最優 然後沿著這條路執行,去享用它的美食 顯然這個僅僅乙個bfs即可實現,此蛇很...

智慧型蛇設計探索

我覺得對於智慧型蛇的設計,最初的想法也一定是最簡單的,那就是一步一步地把蛇走到食物那裡去,以電腦代替人工,我們可以用以下 實現 int mymin int array 4 for i 0 i 4 i return i char wheretogo int hx,int hy,int fx,int f...

智慧型蛇演算法

編寫智慧型演算法 編寫人工智慧程式,使得 snake 每秒自動走一步。決定蛇行走的方向函式的偽 hx,hy 頭的位置 fx,fy 食物的位置 function wheregonext hx,hy,fx,fy 記錄可走的方向 用陣列distance 3 記錄離食物的距離 分別計算蛇頭周邊四個位置到食物...