當前位置:首頁 » 操作系統 » 博弈演算法

博弈演算法

發布時間: 2022-01-25 06:27:43

Ⅰ 計算博弈理論改變著誰的思考方式

計算思維
一.計算思維的定義
計算思維是運用計算機科學的基礎概念進行問題求解、系統設計、以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。
進一步地定義為:
1.通過約簡、嵌入、轉化和模擬等方法,把一個看來困難的問題重新闡釋成一個我們知道問題怎樣解決的方法;
2.是一種遞歸思維,是一種並行處理,是一種把代碼譯成數據又能把數據譯成代碼,是一種多維分析推廣的類型檢查方法;
3.是一種採用抽象和分解來控制龐雜的任務或進行巨大復雜系統設計的方法,是基於關注分離的方法(S oc方法);
4.是一種選擇合適的方式去陳述一個問題,或對一個問題的相關方面建模使其易於處理的思維方法;
5.是按照預防、保護及通過冗餘、容錯、糾錯的方式,並從最壞情況進行系統恢復的一種思維方法;
6.是利用啟發式推理尋求解答,也即在不確定情況下的規劃、學習和調度的思維方法;
7.是利用海量數據來加快計算,在時間和空間之間,在處理能力和存儲容量之間進行折衷的思維方法。
計算思維吸取了問題解決所採用的一般數學思維方法,現實世界中巨大復雜系統的設計與評估的一般工程思維方法,以及復雜性、智能、心理、人類行為的理解等的一般科學思維方法。
二.計算思維的深層次理解
1.計算思維的優點
計算思維建立在計算過程的能力和限制之上,由人由機器執行。計算方法和模型使我們敢於去處理那些原本無法由個人獨立完成的問題求解和系統設計。
2.計算思維的內容
計算思維最根本的內容,即其本質(Essence)是抽象(Abstraction)和自動化(Automation)。計算思維中的抽象完全超越物理的時空觀,並完全用符號來表示,其中,數字抽象只是一類特例。與數學和物理科學相比,計算思維中的抽象顯得更為豐富,也更為復雜。數學抽象的最大特點是拋開現實事物的物理、化學和生物學等特性,而僅保留其量的關系和空間的形式,而計算思維中的抽象卻不僅僅如此。操作模式 計算思維建立在計算過程的能力和限制之上,由人由機器執行。計算方法和模型使我們敢於去處理那些原本無法由任何個人獨自完成的問題求解和系統設計。
3.計算思維用途
計算思維是每個人的基本技能,不僅僅屬於計算機科學家。我們應當使每個孩子在培養解析能力時不僅掌握閱讀、寫作和算術(Reading, writing, and arithmetic——3R),還要學會計算思維。正如印刷出版促進了3R的普及,計算和計算機也以類似的正反饋促進了計算思維的傳播。
計算思維是運用計算機科學的基礎概念去求解問題、設計系統和理解人類的行為。它包括了涵蓋計算機科學之廣度的一系列思維活動。
當我們必須求解一個特定的問題時,首先會問:解決這個問題有多麼困難?怎樣才是最佳的解決方法?計算機科學根據堅實的理論基礎來准確地回答這些問題。表述問題的難度就是工具的基本能力,必須考慮的因素包括機器的指令系統、資源約束和操作環境。
為了有效地求解一個問題,我們可能要進一步問:一個近似解是否就夠了,是否可以利用一下隨機化,以及是否允許誤報(false positive)和漏報(false negative)。計算思維就是通過約簡、嵌入、轉化和模擬等方法,把一個看來困難的問題重新闡釋成一個我們知道怎樣解決的問題。
4.計算思維是一種遞歸思維
它是並行處理。它是把代碼譯成數據又把數據譯成代碼。它是由廣義量綱分析進行的類型檢查。對於別名或賦予人與物多個名字的做法,它既知道其益處又了解其害處。對於間接定址和程序調用的方法,它既知道其威力又了解其代價。它評價一個程序時,不僅僅根據其准確性和效率,還有美學的考量,而對於系統的設計,還考慮簡潔和優雅。
5.抽象和分解
來迎接龐雜的任務或者設計巨大復雜的系統。它是關注的分離(SOC方法)。它是選擇合適的方式去陳述一個問題,或者是選擇合適的方式對一個問題的相關方面建模使其易於處理。它是利用不變數簡明扼要且表述性地刻畫系統的行為。它使我們在不必理解每一個細節的情況下就能夠安全地使用、調整和影響一個大型復雜系統的信息。它就是為預期的未來應用而進行的預取和緩存。計算思維是按照預防、保護及通過冗餘、容錯、糾錯的方式從最壞情形恢復的一種思維。它稱堵塞為「死鎖」,稱約定為「界面」。計算思維就是學習在同步相互會合時如何避免「競爭條件」(亦稱「競態條件」)的情形。計算思維利用啟發式推理來尋求解答,就是在不確定情況下的規劃、學習和調度。它就是搜索、搜索、再搜索,結果是一系列的網頁,一個贏得游戲的策略,或者一個反例。計算思維利用海量數據來加快計算,在時間和空間之間,在處理能力和存儲容量之間進行權衡。
計算思維將滲透到我們每個人的生活之中,到那時諸如演算法和前提條件這些詞彙將成為每個人日常語言的一部分,對「非確定論」和「垃圾收集」這些詞的理解會和計算機科學里的含義驅近,而樹已常常被倒過來畫了。
6.計算思維在其他學科中的影響
例如,機器學習已經改變了統計學。就數學尺度和維數而言,統計學慣用於各類問題的規模僅在幾年前還是不可想像的。各種組織的統計部門都聘請了計算機科學家。計算機學院(系)正在與已有或新開設的統計學系聯姻。
計算機學家們對生物科學越來越感興趣,因為他們堅信生物學家能夠從計算思維中獲益。計算機科學對生物學的貢獻決不限於其能夠在海量序列數據中搜索尋找模式規律的本領。最終希望是數據結構和演算法(我們自身的計算抽象和方法)能夠以其體現自身功能的方式來表示蛋白質的結構。計算生物學正在改變著生物學家的思考方式。類似地,計算博弈理論正改變著經濟學家的思考方式,納米計算改變著化學家的思考方式,量子計算改變著物理學家的思考方式。
這種思維將成為每一個人的技能組合成分,而不僅僅限於科學家。普適計算之於今天就如計算思維之於明天。普適計算是已成為今日現實的昨日之夢,而計算思維就是明日現實。
計算機科學是計算的學問——什麼是可計算的,怎樣去計算。計算機科學不是計算機編程。像計算機科學家那樣去思維意味著遠不止能為計算機編程,還要求能夠在抽象的多個層次上思維。
7.計算思維是根本的,不是刻板的技能
根本技能是每一個人為了在現代社會中發揮職能所必須掌握的。刻板技能意味著機械的重復。具有諷刺意味的是,當計算機像人類一樣思考之後,思維可就真的變成機械的了。
8.計算思維是人的,不是計算機的思維方式
計算思維是人類求解問題的一條途徑,但決非要使人類像計算機那樣地思考。計算機枯燥且沉悶,人類聰穎且富有想像力。是人類賦予計算機激情。配置了計算設備,我們就能用自己的智慧去解決那些在計算時代之前不敢嘗試的問題,實現「只有想不到,沒有做不到」的境界。
9.計算思維是數學和工程思維的互補與融合
計算機科學在本質上源自數學思維,因為像所有的科學一樣,其形式化基礎建築於數學之上。計算機科學又從本質上源自工程思維,因為我們建造的是能夠與實際世界互動的系統,基本計算設備的限制迫使計算機學家必須計算性地思考,不能只是數學性地思考。構建虛擬世界的自由使我們能夠設計超越物理世界的各種系統。

Ⅱ 博弈演算法里的剪枝怎麼用(具體的)

極大極小過程,以及阿爾法-貝塔剪紙。極小極大搜索方法是博弈樹搜索的基本方法,現在博弈樹搜索中最常用的α-β剪枝搜索方法,就是從這一方法發展而來的。
首先假定,有一個評價函數可以對所有的棋局進行評估。當評價函數值大於0時,表示棋局對我方有利,對對方不利。當評價函數小於0時,表示棋局對我方不利,對對方有利。而評價函數值越大,表示對我方越有利。當評價函數值等於正無窮大時,表示我方必勝。評價函數值越小,表示對我方越不利。當評價函數值等於負無窮大時,表示對方必勝。假設雙方都是對弈高手,在只看一步棋的情況下,我方一定走評價函數值最大的一步棋,而對方一定走評價函數值最小的一步棋。會下棋的讀者都知道,在只看一步的情況下最好的棋,從全局來說不一定就好,還可能很不好。因此為了走出好棋,必須多看幾步,從多種可能狀態中選擇一步好棋。
想一想人是如何下棋的呢?人實際上採用的是一種試探性的方法。首先假定走了一步棋,看對方會有那些應法,然後再根據對方的每一種應法,看我方是否有好的回應......這一過程一直進行下去,直到若干步以後,找到了一個滿意的走法為止。初學者可能只能看一、兩個輪次,而高手則可以看幾個,甚至十幾個輪次。
極小極大搜索方法,模擬的就是人的這樣一種思維過程。當輪到我方走棋時,首先按照一定的搜索深度生成出給定深度d以內的所有狀態,計算所有葉節點的評價函數值。然後從d-1層節點開始逆向計算:對於我方要走的節點(用MAX標記,稱為極大節點)取其子節點中的最大值為該節點的值(因為我方總是選擇對我方有利的棋);對於對方要走的節點(用MIN標記,稱為極小節點)取其子節點中的最小值為該節點的值(對方總是選擇對我方不利的棋)。一直到計算出根節點的值為止。獲得根節點取值的那一分枝,即為所選擇的最佳走步。
在圖3.5所示的例子中,假定搜索深度為2,D~J是7個葉節點,在它們下邊括弧中的數字是這些節點的評價函數值(假定可以計算得到)。A、B、C是三個極小節點,它們分別取各自子節點最小值為自己的值,得到三個節點的值分別為-6、-2和-4。s是極大節點,從A、B、C三個節點的值中取最大值,得到-2。由於-2來自於節點B,所以搜索的結果是應選擇B作為我方的走步。對於我方來說,-2並不是一個好的結果,但卻是在對方不犯錯誤的情況下,對我方最有利的結果。因為從圖中可以看出,如果選擇A為我方的走步,如果對方回應D的話,我方可以得到評價值9,固然對我方有利。但是如果對方是一個高手的話,他一定回選擇E,而不是D。在這種情況下,我方只能得到-6,結果豈不是更差。因此,極小極大過程是一種假定對手每次回應都正確的情況下,如何從中找出對我方最有利的走步的搜索方法。
值得注意的是,不管設定的搜索深度是多少層,經過一次搜索以後,只決定了我方一步棋的走法。等到對方回應一步棋之後,需要在新的棋局下重新進行搜索,來決定下一步棋如何走。極小極大搜索策略是考慮雙方對弈若干步之後,從可能的走步中選一步相對好棋的著法來走,即在有限的搜索深度范圍內進行求解。為此要定義一個靜態估計函數f,以便對棋局的勢態(節點)作出優劣估值,這個函數可根據勢態優劣特徵來定義(主要用於對端節點的"價值"進行度量)。一般規定有利於MAX的勢態,f(p)取正值,有利於MIN的勢態,f(p)取負值,勢均力敵的勢態,f(p)取0值。若f(p)=+∞,則表示MAX贏,若f(p)=-∞,則表示MIN贏。下面的討論規定:頂節點深度d=0,MAX代表程序方,MIN代表對手方,MAX先走。
圖3.5是一個表示考慮兩步棋的例子,圖中端節點給出的數字是用靜態函數f(p)計算得到,其他節點不用f(p)估計,因為不夠精確,而應用倒推的辦法取值。例如A、B、C是MIN走步的節點,MAX應考慮最壞的情況,故其估值應分別取其子節點f(p)估值中最小者,而s是MAX走步的節點,可考慮最好的情況,故估值應取A、B、C值中的最大者。這樣求得f(s)=-2,依此確定了相對較優的走步應是走向B,因為從B出發,對手不可能產生比f(s)=-2更差的效果。實際上可根據資源條件,考慮更多層次的搜索過程,從而可得到更准確的倒推值,供MAX選取更正確的走步。當用端節點的靜態估計函數f(p)求倒推值時,兩位選手應採取不同的策略,從下往上逐層交替使用極小和極大的選值方法,故稱極小極大過程。

Ⅲ 高層博弈是什麼意思

博弈聖經著作人在《概言》中描述的博弈
競爭就是博弈,博弈是經濟學。
經濟學是自私的學說,使人的行為私下勾結,在理性地尊重事物之後,便腐蝕家庭和所有人的行為,所以,一直被人咒罵。
經濟學是掠奪和救濟的游戲,兩對手之間主導著人類的不同行為價值,不管你是否願意要,一定會得到前所未有的那一部分。
經濟學是一個二特性競爭結構,也是人與自然的博弈進程。裡面的非物質文化思想,它的美妙之處在於大自然可以分開為每一個人單獨運行,又不會產生競爭性,它可以一次次地重復使用而不會降低效用。
這是一個無聲的世界,可以感知、可以思想,不能觸摸,誘發創造。假如這個與競爭基本對立的文化思想能被所有的人接受,它將會繁榮整個世界。
摘自《博弈聖經》概言

《博弈聖經》里《博弈文化盛宴》一文中說:「領導人的行為一半是道德,一半是博弈。博弈是決策優先,道德是對抗默認。超智慧的領導人知道多少忍讓,又何時競爭...

博弈聖經著作人給出了領導的定義;我們把指向『私湍』或指向「實體」權威的信息,看成領導。

優先預測悲劇後作出的忍讓是道德.摘自「博弈文化盛宴」
優先預測勝利前作出的競爭是博弈.摘自「博弈文化盛宴」
競爭與忍讓基本對立,博弈與道德基本對立.贏在博弈,就缺失道德,贏得道德,就缺少博弈.摘自「博弈文化盛宴」

《博弈聖經》中《人類未知的藍色檔案》一文中寫道:「誰能讓現代的博弈行為接近野蠻,誰能讓友善與兇殘之間的距離大到令人不解,誰就在博弈中取勝。」

《博弈聖經》中《人類未知的藍色檔案》一文中寫道:贏的定義;贏不是大小、不是多少、不是均衡平衡、不是戰略戰術,而是在未來國正論的隨機狀態中,一粒期望的粒子優先達成。

贏也不是福,輸也不是罪,輸贏與均衡屬於第三空地論的內容。

博弈聖經著作人的經典文段;
戰略是大自然的計謀,它是所有事件的總括。戰略是一個博弈體系,它與戰術對應著。
《博弈聖經》上說:
戰略是尋找連續正理、科學的文明實體。
戰術是達成局部真理、文明的文化性質。
戰略的六法則:尋找、連續、正理、科學、文明、實體。
戰術的六性質:達成、局部、真理、文明、文化、性質。
戰略的六法則對應戰術的六性質:
尋找—達成、連續—局部、正理—真理、科學—文明、文明—文化、實體—性質。
戰略體系中的每一項內容都可構成戰略和戰術的元素。
戰略和戰術是用國正論非絕對對立性,區分出了哪是實體、哪是性質。戰略的唯一性不可復制,無限寬廣,又有萬能的理性。戰略不會直接呈現在大腦中,它是通過對博弈實體的區分,才給出計劃、判斷、執行的種種行為的觀念。其實,一切輸贏、大小、多少、好壞的選擇,一切慾望的達成,以及一切真理的實現都是一種區分。
《博弈聖經》上說:「戰略的定義範式是檢驗國家戰略、軍事戰略、經濟戰略、企業戰略的模塊,這是領導人博弈對抗戰勝對手的六法則,可以檢驗出戰略策略的缺陷,也可以檢驗戰略家的能力,罪犯創造的罪惡只包含在戰術中。戰術的六性質是對創新結果的挑戰。
如果沒有國正論的非絕對對立的哲學,怎麼解釋戰略和戰術的關系、上級和下級的關系、中央和地方的關系、國家和人民的關系?在博弈實體里,一個人與博弈實體的關系是相伴相生的。《博弈聖經》上說:「實體一元論在數目上的同一性,發生的因果次序不屬於個人的部分本性,這種屬性是實體的性質。」這種復雜的實體關系用矛盾論解釋不了。矛盾論看似沿著一條無懈可擊的路走下去,最後卻出現了包容,出現了悖論。所謂矛盾論的主要矛盾和次要矛盾的思維方式,根本無法應付未來博弈實體中的一切經濟問題。
「戰略的特徵是發現智謀的綱領,戰術的特徵是創造實在的行為。

《博弈聖經》戰略的定義:戰略是尋找連續正理、科學的文明實體。
《博弈聖經》戰術的定義:戰術是達成局部真理、文明的文化性質。

Ⅳ 非完全信息博弈,有什麼經典的演算法

參見張維迎的博弈論與信息經濟學

Ⅳ 關於C#博弈樹演算法

首先,C#可以實現任何C++可以實現的演算法。我不想討論關於博弈樹的問題,因為對於初學者來說,學習較常見的演算法和數據結構,對學習語言和演算法本身都有益。學習編程不能好高騖遠,如果對演算法本身很了解,又有C#基礎,不愁寫不出來。

Ⅵ 博弈演算法會什麼要考慮對方走最差

如果是兩台計算機博弈的話,那麼都是程序計算得出的走子策略,既然是程序那麼對方就有可能走出當前局面下最差的棋;即便是人與計算機博弈,那麼受到各方面因素的影響,人也有可能走出最差的棋,但概率極小。

c語言 五子棋 博弈樹演算法 葉子節點的分值是如何計算的

其實這個不是難點的,那個分數是當前落子後所形成的以這個棋子為中心的9x9矩陣中所形成的棋型,計算其他地方的棋型顯然沒有什麼意義,再有就是不是C語言才可以寫演算法的,對於極大極小原理,博弈樹和alpha-beta剪枝演算法都是基於這個原理的,如果你是剛學編程不久,而且沒有數據結構的基礎是寫不出來運用博弈樹演算法的五子棋的,先把基礎打好再說。。

Ⅷ 謝謝,各位大神啊~~簡述博弈論與最優化理論的不同之處

我的理解,就經濟學來說,博弈論是方法,最優化是方法的方法。博弈論有具體含義,應用於特定情況;最優化作為一個更為根本的分枝,其應用范圍更大更廣。我的博弈論老師就是數學系研究最優化演算法出身,他經常用最優化裡面的方法來求解博弈論。至於重復博弈中的「收斂到均衡點」與最優化方法中的「收斂到最優解」的關系,我理解,使前者達到均衡點的「策略」類比於使後者達到最優解的「演算法」,並且都可能不是唯一的。

Ⅸ c語言的五子棋代碼(博弈演算法)

#include<stdio.h>
#include<bios.h>
#include<ctype.h>
#include<conio.h>
#include<dos.h>
#defineCROSSRU0xbf/*右上角點*/
#defineCROSSLU0xda/*左上角點*/
#defineCROSSLD0xc0/*左下角點*/
#defineCROSSRD0xd9/*右下角點*/
#defineCROSSL0xc3/*左邊*/
#defineCROSSR0xb4/*右邊*/
#defineCROSSU0xc2/*上邊*/
#defineCROSSD0xc1/*下邊*/
#defineCROSS0xc5/*十字交叉點*/

/*定義棋盤左上角點在屏幕上的位置*/
#defineMAPXOFT5
#defineMAPYOFT2

/*定義1號玩家的操作鍵鍵碼*/
#definePLAY1UP0x1157/*上移--'W'*/
#definePLAY1DOWN0x1f53/*下移--'S'*/
#definePLAY1LEFT0x1e41/*左移--'A'*/
#definePLAY1RIGHT0x2044/*右移--'D'*/
#definePLAY1DO0x3920/*落子--空格鍵*/

/*定義2號玩家的操作鍵鍵碼*/
#definePLAY2UP0x4800/*上移--方向鍵up*/
#definePLAY2DOWN0x5000/*下移--方向鍵down*/
#definePLAY2LEFT0x4b00/*左移--方向鍵left*/
#definePLAY2RIGHT0x4d00/*右移--方向鍵right*/
#definePLAY2DO0x1c0d/*落子--回車鍵Enter*/

/*若想在游戲中途退出,可按Esc鍵*/
#defineESCAPE0x011b

/*定義棋盤上交叉點的狀態,即該點有無棋子*/
/*若有棋子,還應能指出是哪個玩家的棋子*/
#defineCHESSNULL0/*沒有棋子*/
#defineCHESS1'O'/*一號玩家的棋子*/
#defineCHESS2'X'/*二號玩家的棋子*/

/*定義按鍵類別*/
#defineKEYEX99v0/*退出鍵*/
#defineKEYFALLCHESS1/*落子鍵*/
#defineKEYMOVECURSOR2/*游標移動鍵*/
#defineKEYINVALID3/*無效鍵*/

/*定義符號常量:真,假---真為1,假為0*/
#defineTRUE1
#defineFALSE0

/**********************************************************/
/*定義數據結構*/

/*棋盤交叉點坐標的數據結構*/
structpoint
{
intx,y;
};


或者下面這個:
#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#defineN15
#defineB7
#defineSTOP-10000
#defineOK1
#defineNO0
#defineUP328
#defineDOWN336
#defineLEFT331
#defineRIGHT333

inta[N+1][N+1];
intzx,zy;
intwrite=1,biaoji=0;
structzn{
longsum;

inty;

intx;

}w[N+1][N+1],max,max1;


voidcbar(inti,intx,inty,intr);
voidmap(inta[][]);
intgetkey();
intkey();
voidzuobiao(intx,inty,inti);
inttu(inta[][],intwrite);
intwtu(inta[][],intwrite);
intneng(inta[][]);
intzh5(inty,intx,inta[][]);
longzzh5(intb[][],inti);
main()
{
inti,j;
intgdriver=DETECT;
intgmode;
initgraph(&gdriver,&gmode,"");
zx=(N+1)/2;
zy=(N+1)/2;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
a[i][j]=0;
map(a);
i=1;
while(i)
{
intk,n;
k=wtu(a,write);
if(k==STOP)gotoend;
map(a);
n=neng(a);
if(n==STOP)gotoend;
map(a);
}
end:
;
}


intneng(inta[N+1][N+1])

{
inti,j;
intk;
max.sum=-1;

for(i=0;i<=N;i++)
for(j=0;j<+N;j++)

{
w[i][j].sum=0;
w[i][j].x=i;
w[i][j].y=j;
}
for(i=1;i<=N-4;i++)
for(j=1;j<=N-4;j++)
{
k=zh5(i,j,a);
if(k==STOP)return(STOP);
}

for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{

if(max.sum<w[i][j].sum)
{

max.sum=w[i][j].sum;
max.y=i;
max.x=j;
}

elseif(max.sum==w[i][j].sum)
{

if(((max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx))>((i-zy)*(i-zy)+(j-zx)*(j-zx)))
max.sum=w[i][j].sum;
max.y=i;
max.x=j;
}
}
if(a[max.y][max.x]==0)

{
a[max.y][max.x]=-1;
zy=max.y;
zx=max.x;
}

}


intzh5(inty,intx,inta[N+1][N+1])
{

inti,j;
intb[6][6];
longc[13];

longd[6][6];
longtemp;
for(i=y;i<=y+4;i++)
for(j=x;j<=x+4;j++)
b[i+1-y][j+1-x]=a[i][j];
c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];
c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];
c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];
c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];
c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];
c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];
c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];
c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];
c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];
c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];
c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];
c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];


for(i=1;i<=12;i++)
{
switch(c[i])

{

case5:biaoji=1;return(STOP);

case-5:biaoji=-1;return(STOP);

case-4:c[i]=100000;break;

case4:c[i]=100000;break;

case-3:c[i]=150;break;

case3:c[i]=150;break;

case-2:c[i]=120;break;

case2:c[i]=100;break;

case-1:c[i]=1;break;

case1:c[i]=1;break;

default:c[i]=0;

}

}

for(i=1;i<=12;i++)

{

if(c[i]==150)

c[i]+=zzh5(b,i);

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

d[i][j]=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(i==j)d[i][j]+=c[11];

if((i+j)==6)d[i][j]+=c[12];

d[i][j]+=c[i]+c[j+5];

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(b[i][j]!=0)

d[i][j]=-2;

}

max1.sum=-1;

max1.y=0;

max1.x=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(max1.sum<d[i][j])

{

max1.sum=d[i][j];

max1.y=i;

max1.x=j;

w[i+y-1][j+x-1].sum+=max1.sum;

}

elseif(max1.sum==d[i][j])

{

if(((i+y-1-zy)*(i+y-1-zy)+(j+x-1-zx)*(j+x-1-zx))>((max1.y+y-1-zy)*(max1.y+y-1-zy)+(max1.x+x-1-zx)*(max1.x+x-1-zx)))

{

max1.sum=d[i][j];

max1.y=i;

max1.x=j;

}

}

}

}

longzzh5(intb[6][6],intn)

{

inti,j,k,l,m;

switch(n)

{

case1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;

case2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;

case3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;

case4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;

case5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;

case6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;

case7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;

case8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;

case9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;

case10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;

case11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;

case12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;

}

if((i==0&&j==1&&k==1&&l==1&&m==0))

return(900);

if((i==0&&j==-1&&k==-1&&l==-1&&m==0))

return(1000);

if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))

return(20);

if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))

return(20);

if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))

return(-60);

if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))

return(-60);

}


intwtu(inta[N+1][N+1],intwrite)

{

inti=1;

map(a);

zuobiao(zx,zy,1);

while(i)

{

intk;

k=tu(a,write);

if(k==OK)i=0;

if(k==STOP)return(STOP);

}

}


intgetkey()

{

intkey,lo,hi;

key=bioskey(0);

lo=key&0x00ff;

hi=(key&0xff00)>>8;

return((lo==0)?hi+256:lo);

}


intkey()

{

intk;

k=getkey();

switch(k)

{

case27:return(STOP);

case13:

case'':return(OK);

case328:return(UP);

case336:return(DOWN);

case331:return(LEFT);

case333:return(RIGHT);

default:return(NO);

}

}


voidzuobiao(intx,inty,inti)

{

intr;

if(i!=0)

{

setcolor(GREEN);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);


}

else

{

if(a[zy][zx]==1)

{

setcolor(8);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

}

elseif(a[zy][zx]==-1)

{

setcolor(WHITE);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

}

else

{

setcolor(B);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

setcolor(RED);line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);

line(75+25*zx,25+25*zy-5,75+25*zx,25+25*zy+5);

}

}

}


inttu(inta[N+1][N+1],intwrite)

{

intk;

re:

k=key();

if(k==OK)

{

if(a[zy][zx]==0)

{

a[zy][zx]=write;

}

else

gotore;

}

if(k==STOP)return(STOP);

if(k==NO)gotore;

if(k==UP)

{

inti,j;

if(zy==1)j=zy;

elsej=zy-1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

gotore;

}

if(k==DOWN)

{

inti,j;

if(zy==N)j=zy;

elsej=zy+1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

gotore;

}

if(k==LEFT)

{

inti,j;

if(zx==1)i=zx;

elsei=zx-1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

gotore;

}

if(k==RIGHT)

{

inti,j;

if(zx==N)i=zx;

elsei=zx+1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

gotore;

}

}


voidcbar(inti,intx,inty,intr)

{

if(i!=0)

{

if(i==1)

setcolor(8);

elseif(i==-1)

setcolor(WHITE);

for(i=1;i<=r;i++)

{

circle(x,y,i);

}

}

}


voidmap(inta[N+1][N+1])

{

inti,j;

cleardevice();

setbkcolor(B);

setcolor(RED);

for(i=0;i<N;i++)

{

line(100,50+25*i,75+N*25,50+25*i);

line(100+25*i,50,100+25*i,25+N*25);

}

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

cbar(a[i][j],75+25*j,25+25*i,10);

}

熱點內容
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:869
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:652
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:743
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:172
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:779
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811