吳昊品遊戲核心演算法 Round 10 —— 關於先前發布的圍棋演算法(類比)中目數統計函數的全解析(感謝林安澤)

來源:互聯網
上載者:User

經過與華科ACM林安澤交流後得知,作者沒有考慮到如下兩種情況:(1)在收官階段,實地如何計算在內(2)在終盤結束的時候,是不可能有沒有歸屬的空格的,所有的空位置是都有歸屬的,這也是圍棋的常識,看來作者貌似不會下圍棋哦!^_^ 

  首先,源碼中有一個問題,就是c=qipan[j][i].color應該改為c=qipan[i][j].color,在此基礎上,這段代碼主要是統計 白子的數目,因為圍棋中黑子讓白子3又3/4個子,具體為什麼這樣將在之後的吳昊系列中講解。那麼,我們可以看到,只需要單方面地統計白子的總數目就可以 了。首先將三個數組都置為0,從第一行開始掃描。如果一開始是空白的話,就直接算作空白的了。當遇到黑子或者白子的時候,我們開始統計地區,這裡將k設為 地區標識。不過,這裡有一個問題,作者還是缺乏圍棋的基本常識,圍棋是用了圍地的,而不是用來吃子的,該統計確實是可以統計中盤的一些勢力範圍,但是不可 能統計最終收官之後的情況,因為整個流程的“思維”就不是圍地的“思維”。基於以上一點,我們再來看標程,其實,作者本人也只是實現了一種情況。首先,忽 略黑棋的地區中有白棋的可能,這是基於前面的代碼所實現的。因為,每次吃子的時候,就將裡面的白子都清除了。這樣,我們考慮每一行的“一段黑子”,可以發 現,只要收尾都為黑,那麼中間的空格都是黑子的了。這也就是為什麼每次都要將空位置都置0,這也是為了防止黑所擁有的空格被白計算了。

  附上這段原始碼:

  

 1 int summ(void)
 2  {
 3    int i=0,j=0,c=2,k=2;
 4    //計數白子,黑子,空白的數目
 5    sum[0]=0;
 6    sum[1]=0;
 7    sum[2]=0;
 8    for (i=1;i<=19;i++)
 9    {    //從最外層開始搜尋
10      k=qipan[i][1].color;
11      for (j=1;j<=19;j++)
12      {
13        c=qipan[j][i].color;
14        switch (c)
15        {
16          case 2:
17            if (k==2) sum[2]++;
18            else sum[k]++;
19            break;
20          case 0:
21            if (k==0)
22            {
23              sum[c]++;
24            }
25            else if(k==2)
26            {
27              sum[c]=sum[c]+sum[2]+1;
28              k=c;
29              sum[2]=0;
30            }
31            else if(k==1)
32            {
33              sum[c]++;
34              k=c;
35              sum[2]=0;
36            }
37            break;
38          case 1:
39            if (k==1)
40            {
41              sum[c]++;
42            }
43            else if(k==2)
44            {
45              sum[c]=sum[c]+sum[2]+1;
46              k=c;
47              sum[2]=0;
48            }
49            else if(k==0)
50            {
51              sum[c]++;
52              k=c;
53              sum[2]=0;
54            }
55            break;
56        }
57      }
58    }
59    return sum[0];
60  }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.