#definen8
voiddfs(intx,inty,intcount)
{
inti,tx,ty;
if(count>n*n)
{
output_solution;//輸出一個(gè)解
return;
}
for(i=0;i<8;i++)
{
tx=hn[i].x;//hn[]保存八個(gè)方位子結(jié)點(diǎn)
ty=hn[i].y;
s[tx][ty]=count;
dfs(tx,ty,count+1);//遞歸調(diào)用
s[tx][ty]=0;
}
}
這樣做是完全可行的,因?yàn)樗斎氲氖侨拷狻?
但是馬遍歷當(dāng)8x8時(shí)解是非常之多,用天文數(shù)字形容也不為過(guò),這樣一來(lái)我們的求解的過(guò)程就非常慢,并且出一個(gè)解的時(shí)間也會(huì)也非常慢。
當(dāng)我們?cè)诿總€(gè)結(jié)點(diǎn)對(duì)其子結(jié)點(diǎn)進(jìn)行選取的時(shí)候,優(yōu)先選擇‘出口’最小的進(jìn)行搜索,‘出口’的意思是在這些子結(jié)點(diǎn)中它們的可行子結(jié)點(diǎn)的個(gè)數(shù),也就是‘孫子’結(jié)點(diǎn)越少的越優(yōu)先跳。
如果優(yōu)先選擇出口多的子結(jié)點(diǎn),那出口少的子結(jié)點(diǎn)就會(huì)越來(lái)越多,很可能出現(xiàn)‘死’結(jié)點(diǎn)
這樣對(duì)下面的搜索純粹是徒勞,這樣就會(huì)浪費(fèi)很多無(wú)用的時(shí)間。
反過(guò)來(lái)如果每次都優(yōu)先選擇出口少的結(jié)點(diǎn)跳,那出口少的結(jié)點(diǎn)就會(huì)越來(lái)越少,這樣跳成功的機(jī)會(huì)就更大一些。
.......
蘇牧:“。。。。”
他的腦海中再次緩緩的出現(xiàn)了一堆問(wèn)號(hào)。
完全沒(méi)想到居然會(huì)有這么大的跨越。
看著僅僅只有一個(gè)小題,卻是密密麻麻的解析,蘇牧突然明白了為什么數(shù)學(xué)奧賽參加的人那么多,信息學(xué)奧賽參加的人卻那么少。
這東西,確定是適合青少年做的??
不會(huì)禿頂嗎??
......
ps:因?yàn)橐_(kāi)始上網(wǎng)課了...要準(zhǔn)備的東西挺多的,后面也會(huì)慢慢忙起來(lái),所以更新時(shí)間偶爾會(huì)些變化,但是每天兩更應(yīng)該可以保持住...
ps2:弱弱的求幾張推薦票。
書(shū)友正在讀: