第一百二十二章 全國青少年信息學奧林匹克競賽(2 / 2)

這種題目還需要解析??

這不是理所當然的嗎?

她看向了第二個題目。

題目2:在一個n??的方格陣中,每一個格子賦予一個數(即權值),規定每次移動時隻能向上或者向右,現試找一條路勁,使其從左下角至右上角所經過的權值之和最大。

解析:在這種情況下

一步一步看下來。

蘇牧倒也沒覺得有什麼難的,隻不過是一些取極值的問題。

但是,當他翻到後麵的經典習題和解析的時候,整個人都不好了。

【經典習題】在8x8方格的棋盤上,從任意指定方格出發,為馬尋找一條走遍棋盤每一格並且隻經過一次的一條路徑。

解析:首先這是一個搜索問題,運用深度優先搜索進行求解,算法如下:

1輸入初始位置坐標x,y;

2步驟 c:

如果capgt 64輸出一個解,返回上一步驟c--

(x,y)← c

計算(x,y)的八個方位的子結點,選出那些可行的子結點

循環遍曆所有可行子結點,步驟c++重複2

顯然2是一個遞歸調用的過程,大致如下(c++程序解析):

defe n 8

void dfs(t x,t y,t unt)

{

t i,tx,ty

if(untapgtnn)

{

output_tn()輸出一個解

return

}

for(i=0 iaplt8 i++)

{

tx=hn[xhn[]保存八個方位子結點

ty=hn[y

s[tx][ty]=unt

dfs(tx,ty,unt+1)遞歸調用

s[tx][ty]=0

}

}

這樣做是完全可行的,因為它輸入的是全部解。

但是馬遍曆當8x8時解是非常之多,用天文數字形容也不為過,這樣一來我們的求解的過程就非常慢,並且出一個解的時間也會也非常慢。

當我們在每個結點對其子結點進行選取的時候,優先選擇‘出口’最小的進行搜索,‘出口’的意思是在這些子結點中它們的可行子結點的個數,也就是‘孫子’結點越少的越優先跳。

如果優先選擇出口多的子結點,那出口少的子結點就會越來越多,很可能出現‘死’結點

這樣對下麵的搜索純粹是徒勞,這樣就會浪費很多無用的時間。

反過來如果每次都優先選擇出口少的結點跳,那出口少的結點就會越來越少,這樣跳成功的機會就更大一些。

蘇牧:“。。。。”

他的腦海中再次緩緩的出現了一堆問號。

完全沒想到居然會有這麼大的跨越。

看著僅僅隻有一個小題,卻是密密麻麻的解析,蘇牧突然明白了為什麼數學奧賽參加的人那麼多,信息學奧賽參加的人卻那麼少。

這東西,確定是適合青少年做的??

不會禿頂嗎??

ps:因為要開始上網課了要準備的東西挺多的,後麵也會慢慢忙起來,所以更新時間偶爾會些變化,但是每天兩更應該可以保持住

ps2:弱弱的求幾張推薦票。