亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 五子棋核心算法研究.txt

?? 一個(gè)關(guān)于五子棋主要算法的描述
?? TXT
字號(hào):
五子棋核心算法研究


五子棋是一種受大眾廣泛喜愛(ài)的游戲,其規(guī)則簡(jiǎn)單,變化多端,非常富有趣味性和消遣性。這里設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)人機(jī)對(duì)下的五子棋程序,采用了博弈樹(shù)的方法,應(yīng)用了剪枝和最大最小樹(shù)原理進(jìn)行搜索發(fā)現(xiàn)最好的下子位置。介紹五子棋程序的數(shù)據(jù)結(jié)構(gòu)、評(píng)分規(guī)則、勝負(fù)判斷方法和搜索算法過(guò)程。 

一、相關(guān)的數(shù)據(jù)結(jié)構(gòu) 
    關(guān)于盤(pán)面情況的表示,以鏈表形式表示當(dāng)前盤(pán)面的情況,目的是可以允許用戶進(jìn)行悔棋、回退等操作。 
    CList StepList; 
    其中Step結(jié)構(gòu)的表示為: 

    struct Step 
    { 
      int  m; //m,n表示兩個(gè)坐標(biāo)值 
      int  n; 
      char side; //side表示下子方 
    }; 
以數(shù)組形式保存當(dāng)前盤(pán)面的情況, 
目的是為了在顯示當(dāng)前盤(pán)面情況時(shí)使用: 
  char FiveArea[FIVE_MAX_LINE][FIVE_MAX_LINE]; 

    其中FIVE_MAX_LINE表示盤(pán)面最大的行數(shù)。 

    同時(shí)由于需要在遞歸搜索的過(guò)程中考慮時(shí)間和空間有效性,只找出就當(dāng)前情況來(lái)說(shuō)相對(duì)比較好的幾個(gè)盤(pán)面,而不是對(duì)所有的可下子的位置都進(jìn)行搜索,這里用變量CountList來(lái)表示當(dāng)前搜索中可以選擇的所有新的盤(pán)面情況對(duì)象的集合: 

  CList CountList; 
    其中類CBoardSituiton為: 
  class CBoardSituation 
  { 
  CList  StepList; //每一步的列表 
  char FiveArea[FIVE_MAX_LINE][FIVE_MAX_LINE]; 
  struct Step machineStep;    //機(jī)器所下的那一步 
  double value;  //該種盤(pán)面狀態(tài)所得到的分?jǐn)?shù) 
} 

二、評(píng)分規(guī)則 
    對(duì)于下子的重要性評(píng)分,需要從六個(gè)位置來(lái)考慮當(dāng)前棋局的情況,分別為:-,¦,/,\,//,\\ 


    實(shí)際上需要考慮在這六個(gè)位置上某一方所形成的子的布局的情況,對(duì)于在還沒(méi)有子的地方落子以后的當(dāng)前局面的評(píng)分,主要是為了說(shuō)明在這個(gè)地方下子的重要性程度,設(shè)定了一個(gè)簡(jiǎn)單的規(guī)則來(lái)表示當(dāng)前棋面對(duì)機(jī)器方的分?jǐn)?shù)。 

    基本的規(guī)則如下: 

判斷是否能成5, 如果是機(jī)器方的話給予100000分,如果是人方的話給予-100000 分; 
判斷是否能成活4或者是雙死4或者是死4活3,如果是機(jī)器方的話給予10000分,如果是人方的話給予-10000分; 
判斷是否已成雙活3,如果是機(jī)器方的話給予5000分,如果是人方的話給予-5000 分; 
判斷是否成死3活3,如果是機(jī)器方的話給予1000分,如果是人方的話給予-1000 分; 
判斷是否能成死4,如果是機(jī)器方的話給予500分,如果是人方的話給予-500分; 
判斷是否能成單活3,如果是機(jī)器方的話給予200分,如果是人方的話給予-200分; 
判斷是否已成雙活2,如果是機(jī)器方的話給予100分,如果是人方的話給予-100分; 
判斷是否能成死3,如果是機(jī)器方的話給予50分,如果是人方的話給予-50分; 
判斷是否能成雙活2,如果是機(jī)器方的話給予10分,如果是人方的話給予-10分; 
判斷是否能成活2,如果是機(jī)器方的話給予5分,如果是人方的話給予-5分; 
判斷是否能成死2,如果是機(jī)器方的話給予3分,如果是人方的話給予-3分。 

    實(shí)際上對(duì)當(dāng)前的局面按照上面的規(guī)則的順序進(jìn)行比較,如果滿足某一條規(guī)則的話,就給該局面打分并保存,然后退出規(guī)則的匹配。注意這里的規(guī)則是根據(jù)一般的下棋規(guī)律的一個(gè)總結(jié),在實(shí)際運(yùn)行的時(shí)候,用戶可以添加規(guī)則和對(duì)評(píng)分機(jī)制加以修正。 

三、勝負(fù)判斷 
    實(shí)際上,是根據(jù)當(dāng)前最后一個(gè)落子的情況來(lái)判斷勝負(fù)的。實(shí)際上需要從四個(gè)位置判斷,以該子為出發(fā)點(diǎn)的水平,豎直和兩條分別為 45度角和135度角的線,目的是看在這四個(gè)方向是否最后落子的一方構(gòu)成連續(xù)五個(gè)的棋子,如果是的話,就表示該盤(pán)棋局已經(jīng)分出勝負(fù)。具體見(jiàn)下面的圖示: 


四、搜索算法實(shí)現(xiàn)描述 
    注意下面的核心的算法中的變量currentBoardSituation,表示當(dāng)前機(jī)器最新的盤(pán)面情況, CountList表示第一層子節(jié)點(diǎn)可以選擇的較好的盤(pán)面的集合。核心的算法如下: 
void MainDealFunction() 
{ 
  value=-MAXINT; //對(duì)初始根節(jié)點(diǎn)的value賦值 
CalSeveralGoodPlace(currentBoardSituation,CountList); 
//該函數(shù)是根據(jù)當(dāng)前的盤(pán)面情況來(lái)比較得到比較好的可以考慮的幾個(gè)盤(pán)面的情況,可以根據(jù)實(shí)際的得分情況選取分?jǐn)?shù)比較高的幾個(gè)盤(pán)面,也就是說(shuō)在第一層節(jié)點(diǎn)選擇的時(shí)候采用貪婪算法,直接找出相對(duì)分?jǐn)?shù)比較高的幾個(gè)形成第一層節(jié)點(diǎn),目的是為了提高搜索速度和防止堆棧溢出。 
pos=CountList.GetHeadPosition(); 
CBoardSituation* pBoard; 
for(i=0;ivalue=Search(pBoard,min,value,0); 
  Value=Select(value,pBoard->value,max);  
  //取value和pBoard->value中大的賦給根節(jié)點(diǎn) 
} 
for(i=0;ivalue)  
//找出那一個(gè)得到最高分的盤(pán)面 
  { 
    currentBoardSituation=pBoard; 
    PlayerMode=min; //當(dāng)前下子方改為人 
    Break; 
  } 
} 

    其中對(duì)于Search函數(shù)的表示如下:實(shí)際上核心的算法是一個(gè)剪枝過(guò)程,其中在這個(gè)搜索過(guò)程中相關(guān)的四個(gè)參數(shù)為:(1)當(dāng)前棋局情況;(2)當(dāng)前的下子方,可以是機(jī)器(max)或者是人(min);(3)父節(jié)點(diǎn)的值oldValue;(4)當(dāng)前的搜索深度depth。 

double Search(CBoardSituation& 
board,int mode,double oldvalue,int depth) 
{ 
  CList  m_DeepList; 
  if(deptholdvalue))==    TRUE) 
      { 
          if(mode==max) 
            value=select(value,search(successor 
          Board,min,value,depth+1),max); 
          else 
            value=select(value,search(successor 
            Board,max,value,depth+1),min); 
      } 
      return value; 
  } 
  else 
  { 
if ( goal(board)<>0)  
//這里goal(board)<>0表示已經(jīng)可以分出勝負(fù) 
  return goal(board); 
else 
  return evlation(board); 
        } 
    } 

    注意這里的goal(board)函數(shù)是用來(lái)判斷當(dāng)前盤(pán)面是否可以分出勝負(fù),而evlation(board)是對(duì)當(dāng)前的盤(pán)面從機(jī)器的角度進(jìn)行打分。 

    下面是Select函數(shù)的介紹,這個(gè)函數(shù)的主要目的是根據(jù) PlayerMode情況,即是機(jī)器還是用戶來(lái)返回節(jié)點(diǎn)的應(yīng)有的值。 

double Select(double a,double b,int mode) 
{ 
  if(a>b && mode==max)&brvbar;&brvbar; (a< b && mode==min) 
return a; 
  else 
return b; 
} 

五、小結(jié) 
    和國(guó)內(nèi)許多只是采用規(guī)則或者只是采用簡(jiǎn)單遞歸而沒(méi)有剪枝的那些程序相比,在智力上和時(shí)間有效性上都要好于這些程序。同時(shí)所討論的方法和設(shè)計(jì)過(guò)程為用戶設(shè)計(jì)其他的游戲(如象棋和圍棋等)提供了一個(gè)參考 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美撒尿777hd撒尿| 久久99精品久久久久婷婷| 亚洲18影院在线观看| 青草av.久久免费一区| 国产一区二区美女| 色综合婷婷久久| 欧美成人精品福利| 国产精品伦理一区二区| 视频一区免费在线观看| 国产一区二区三区久久久| 91福利在线免费观看| 精品嫩草影院久久| 亚洲精品视频免费看| 美女久久久精品| 一本大道久久a久久精品综合| 日韩三级视频在线观看| 国产精品国模大尺度视频| 日本在线不卡一区| 97久久精品人人爽人人爽蜜臀| 欧美另类变人与禽xxxxx| 日本一区二区三级电影在线观看 | 蜜臀av性久久久久av蜜臀妖精| 高清不卡在线观看av| 欧美亚洲禁片免费| 中文字幕第一区二区| 天天av天天翘天天综合网色鬼国产| 国产白丝精品91爽爽久久| 欧美精品日韩一区| 中文字幕一区av| 老司机一区二区| 欧美视频完全免费看| 国产精品久久久久毛片软件| 久色婷婷小香蕉久久| 欧美色视频一区| 自拍偷自拍亚洲精品播放| 国产在线看一区| 欧美日韩国产乱码电影| 亚洲男人的天堂在线aⅴ视频| 国产一区三区三区| 欧美一区二区三区啪啪| 亚洲综合免费观看高清在线观看| 成人免费高清在线观看| 精品欧美一区二区久久| 午夜精品久久久久久久久久| 99久久精品国产麻豆演员表| 久久久蜜桃精品| 麻豆精品久久精品色综合| 欧美日韩卡一卡二| 亚洲久草在线视频| 99精品在线观看视频| 国产欧美视频一区二区| 国产在线麻豆精品观看| 日韩免费看的电影| 青青草成人在线观看| 欧美精品1区2区| 午夜精品在线看| 欧美怡红院视频| 亚洲男人的天堂网| 色综合久久中文综合久久牛| 亚洲婷婷综合色高清在线| 成人免费视频app| 国产精品欧美综合在线| 国产91在线看| 国产精品青草综合久久久久99| 国产成人午夜电影网| 久久嫩草精品久久久久| 国产精品一区二区x88av| 久久一区二区视频| 国产一区二区精品久久| 久久五月婷婷丁香社区| 国产一区二区三区av电影| 26uuu国产在线精品一区二区| 久久国内精品视频| 久久婷婷综合激情| 国产sm精品调教视频网站| 日本一区二区免费在线| 成人av片在线观看| 亚洲欧洲中文日韩久久av乱码| 91免费观看视频在线| 亚洲色图视频网站| 欧美午夜片在线观看| 日韩和欧美一区二区| 欧美一二三区在线观看| 国产自产v一区二区三区c| 久久久久亚洲蜜桃| eeuss国产一区二区三区| 日韩一区有码在线| 在线观看免费视频综合| 婷婷开心激情综合| 精品三级av在线| 懂色av一区二区三区免费看| 亚洲情趣在线观看| 7777精品伊人久久久大香线蕉的 | 精品91自产拍在线观看一区| 久久99热狠狠色一区二区| 国产日产精品1区| 99re视频精品| 亚洲国产日韩综合久久精品| 337p亚洲精品色噜噜噜| 国产毛片精品一区| 亚洲欧美激情一区二区| 555夜色666亚洲国产免| 国产一区不卡精品| 亚洲裸体在线观看| 欧美一区二区视频在线观看| 国产高清在线精品| 一区二区三区免费网站| 欧美r级电影在线观看| 成人av电影在线观看| 爽爽淫人综合网网站| 久久久久久日产精品| 91传媒视频在线播放| 国产在线精品免费av| 亚洲裸体在线观看| 日韩欧美成人一区二区| 91在线观看一区二区| 日本vs亚洲vs韩国一区三区 | 91麻豆蜜桃一区二区三区| 日韩在线卡一卡二| 国产精品欧美经典| 91精品国产综合久久久蜜臀图片| 国产馆精品极品| 视频一区欧美日韩| 国产精品传媒在线| 欧美电影免费提供在线观看| 91丨九色丨蝌蚪富婆spa| 久久av老司机精品网站导航| 亚洲激情综合网| 精品福利二区三区| 在线观看欧美黄色| 成人午夜激情片| 乱中年女人伦av一区二区| 亚洲图片激情小说| 久久夜色精品一区| 欧美日韩国产综合一区二区| 成人高清伦理免费影院在线观看| 日韩av电影免费观看高清完整版 | 国产成人啪午夜精品网站男同| 亚洲国产精品久久人人爱蜜臀| 日本一区二区三级电影在线观看| 制服丝袜av成人在线看| 97久久精品人人做人人爽50路| 久久99精品久久久| 亚洲第一av色| 亚洲欧美国产77777| 欧美激情自拍偷拍| 日韩精品一区二区三区蜜臀| 欧美日韩精品一区二区三区四区| 成人高清视频在线| 国产精品18久久久久久久久久久久| 奇米影视一区二区三区| 亚洲国产中文字幕| 一区二区三区欧美亚洲| 亚洲欧美在线另类| 国产欧美1区2区3区| 久久美女艺术照精彩视频福利播放| 欧美一区午夜精品| 欧美日韩的一区二区| 欧美怡红院视频| 在线视频欧美精品| 色呦呦一区二区三区| 99免费精品视频| 99久久精品免费精品国产| 国产福利91精品| 国产精品一区二区久久不卡| 久久99精品久久久久久| 免费人成精品欧美精品| 日本视频在线一区| 日韩精品亚洲一区| 日韩主播视频在线| 秋霞成人午夜伦在线观看| 日韩经典一区二区| 同产精品九九九| 日韩成人av影视| 奇米综合一区二区三区精品视频| 日本伊人精品一区二区三区观看方式| 亚洲自拍另类综合| 亚洲大片精品永久免费| 亚洲一区二三区| 亚洲韩国精品一区| 亚洲成国产人片在线观看| 亚洲成人黄色小说| 日产欧产美韩系列久久99| 日韩国产欧美在线播放| 麻豆传媒一区二区三区| 九九**精品视频免费播放| 久久精品国产99国产| 国产麻豆视频一区二区| 大美女一区二区三区| 91色porny在线视频| 91国偷自产一区二区开放时间| 精品视频在线看| 日韩一区二区三区电影在线观看 | 成人性生交大片免费| 成人18精品视频| 色婷婷国产精品久久包臀| 欧美亚洲国产一卡| 欧美精品电影在线播放| 欧美一区二区在线视频| 精品卡一卡二卡三卡四在线|