您好,登錄后才能下訂單哦!
筆者簡介:
從小就不是個(gè)勤奮的孩子,一般事情都保持中游水平。對事情也沒窮極的精神,所以我更喜歡聽別人分享事情,從而去發(fā)現(xiàn)別人身上的優(yōu)點(diǎn)。
如果用三分鐘熱度來形容我再恰當(dāng)不過了,我會(huì)把應(yīng)該做的事做好至于其他的?。??葱那?!
很羨慕那些有思想有作為的人,在我看來他們很有‘正事’,當(dāng)然我也會(huì)慢慢的向那個(gè)方向發(fā)展,盡管需要時(shí)間的沉淀(哈哈)
作為眾多程序猿中妹紙,我決定為自己起個(gè)藝名,不,筆名!為了展現(xiàn)我們團(tuán)隊(duì)中不同的性格,我也建議大家在寫的時(shí)候注明自己的藝名!
那么問題來了,瀏覽Iteye時(shí)看到的問題,順便邊研究邊給大家獻(xiàn)丑。。。
〇 X 〇 〇 〇
〇 〇 〇 〇 〇
〇 〇 〇 〇 〇
〇 〇 〇 〇 〇
〇 〇 〇 〇 〇
不過X點(diǎn),把所有的圈連起來,不能重復(fù),不能斜連,不能跳圈
第一步:我把這個(gè)圖變成程序可看懂的語言
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55
第二步:設(shè)置了四個(gè)事件
首先每個(gè)點(diǎn)有四個(gè)走的方向,我給設(shè)置了四個(gè)方向事件
分別為:向上走、向下走、向左走、向右走
private function left($x, $y, $oldArr)
{
if($y > 1)
{
if(false == in_array($x.$y-1, $oldArr) //判斷此點(diǎn)是否走過
{
$oldArr[] = $x.$y-1;//記錄走過的點(diǎn)
return $x."-".$y-1;//返回下一個(gè)點(diǎn)
}
}
return false;
}
private function right($x, $y, $oldArr)
{
if($y < 5)
{
if(false == in_array($x.$y+1, $oldArr)
{
$oldArr[] = $x.$y+1;
return $x."-".$y+1;
}
}
return false;
}
private function up($x, $y, $oldArr)
{
if($x > 1)
{
if(false == in_array($x-1.$y, $oldArr)
{
$oldArr[] = $x-1.$y;
return $x-1."-".$y;
}
}
return false;
}
private function down($x, $y, $oldArr)
{
if($x < 5)
{
if(false == in_array($x+1.$y, $oldArr)
{
$oldArr[] = $x+1.$y;//記錄走過的點(diǎn)
return $x+1."-".$y;
}
}
return false;
}
第三步:開始寫試運(yùn)行方法
當(dāng)起點(diǎn)固定以后,開始選擇方向,當(dāng)一個(gè)方向可走時(shí),走到下一個(gè)點(diǎn),然后繼續(xù)選擇方向,循環(huán)往復(fù),直到所有點(diǎn)都走通為止。
public function goTry($x, $y, $oldArr, $methods)
{
$oldArr[] = $x.$y;
foreach($methods as $method)
{
$next = $this->$method($x, $y, $oldArr);//循環(huán)走四個(gè)方向的可能性
if(false == empty($next)) //如果此方向可走則繼續(xù),否則,走另一個(gè)方向
{
$xy = explode("-", $next);
if($xy[0] != 1 && $xy[1] != 2) //12點(diǎn)處不能走
{
goTry($xy[0], $xy[1]); //遞歸循環(huán)
}
}
}
}
第四步寫主方法:循環(huán)取調(diào)用
public function AGame($request, $response)
{
$methods = array('left', 'right', 'up', 'down');
for($i=1;$i<=5;$i++)
{
for($j=1; $j<=5; $j++)
{
//換不同的起點(diǎn)
if($i != 1 && $j != 2)
{
$oldArr = array();
goTry($i, $j, $oldArr, $methods);
if(count($oldArr) == 24)
{
var_dump($oldArr);exit;
}
}
}
}
}
以上算是我分享的過程,代碼寫的可能有很多不好的地方,但寫算法還是挺有意思的一件事。像遞歸方法只聽過也是首次真正的去用,有些知識了解沒有用,當(dāng)你真需要的時(shí)候估計(jì)不小心就想到了
因?yàn)橹赖闹R甚少,上午看了個(gè)小游戲有點(diǎn)興趣就寫博客的過程邊實(shí)現(xiàn)了下。。。
最后注我的筆名 ---小夢
同步博文:http://www.cnblogs.com/newbalanceteam/p/4835894.html
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。