智慧型蛇是讓貪吃蛇在有限的地圖內走動,吃食物使身體變長使得能夠走的步數最多。
既然是讓步數最多,又由於對問題的簡化局面中每次只會有乙個食物,且無除邊界外的障礙物。
可以想到比較 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 記錄離食物的距離 分別計算蛇頭周邊四個位置到食物...