青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
C大調(diào)如歌的行板
我也來發(fā)明山楂車輪
C++博客
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆 - 32 文章 - 94 trackbacks - 0
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(8)
給我留言
查看公開留言
查看私人留言
隨筆分類
C++(4)
鋼琴(8)
其他(9)
算法(6)
圖形學(13)
游戲編程(9)
隨筆檔案
2014年2月 (1)
2013年11月 (1)
2013年5月 (1)
2013年1月 (1)
2012年12月 (1)
2012年11月 (1)
2012年8月 (1)
2012年2月 (2)
2011年10月 (1)
2011年5月 (1)
2011年4月 (2)
2011年3月 (1)
2010年12月 (1)
2010年6月 (1)
2010年2月 (1)
2010年1月 (4)
2009年10月 (3)
2009年9月 (1)
2009年8月 (2)
2009年7月 (2)
2009年6月 (3)
好友連接
大學同班大牛人CK
大學同宿大牛人vczh
搜索
最新評論
1.?re: 之前做的LOD動態(tài)地形
@kk
沒錯啊,直接在vs里面依據(jù)高度圖重新計算頂點高度
--陳昱(CY)
2.?re: 之前做的LOD動態(tài)地形[未登錄]
大神,何詠說的“一般都是分塊之后直接在GPU上面搞Displacement ”,什么是Displacement啊。Displacemen mapping 么?
--kk
3.?re: 肖邦練習曲《離別》
多去鋼琴有關的論壇交流~@溪流
--陳昱(CY)
4.?re: 肖邦練習曲《離別》
@陳昱(CY)
仰慕~~
拜厄前50條水平,有空請多多指教!
--溪流
5.?re: 肖邦練習曲《離別》
鋼琴年齡比編程還長好多的說~~@溪流
--陳昱(CY)
閱讀排行榜
1.?shader toy 上練習,畫了個baby grand piano(4852)
2.?喬治·溫斯頓的C大調(diào)《卡農(nóng)》(3413)
3.?(原創(chuàng))宇宙10個維度的一句話理解(3402)
4.?肖邦練習曲《牧羊人的笛子》(3365)
5.?李斯特《愛之夢》(3291)
評論排行榜
1.?之前做的LOD動態(tài)地形(10)
2.?多點觸摸的GUI?(10)
3.?一個想法,實現(xiàn)n維超級立方體!!!初步成功!!!(第二章)(9)
4.?一個想法,實習n維立方體!!! (結束)(9)
5.?一個想法,用程序畫出高維超立方體在三維上的投影!!!(1)(8)
以前寫的一個N連看
這一周,我寫好了一個連連看,在設計連連看的算法的過程中,我設計了一個可以控制連數(shù)的連連看算法,并把連連看改成了“
n
連看”,然后經(jīng)過算法優(yōu)化,使我的連連看算法在
20
連、無解、矩陣是
13*11
、最壞情況(一個周圍空曠,一個被包圍)下,運算速度僅
2
秒左右。而經(jīng)過優(yōu)化之前,到了
6
連的最壞情況下就已經(jīng)慢得無法接受了。
基本的算法是這樣的:
先寫一個函數(shù)
f1
,判斷點
1
和點
2
能否經(jīng)過某個方向直線到達,方向有上、下、左、右四種
再寫一個函數(shù)
f2
用于循環(huán)遞歸調(diào)用
f1
,思路是:如果起始點通過直線到達不了目標點,就把起始點可以直線到達的每個點當成下一次調(diào)用的起始點,直到找到目標點就立即返回。
f2
的參數(shù)包括:
n
連:用來控制遞歸深度;
2
個點(起始點和目標點),用來判斷能夠經(jīng)過
n
連連接的
2
個點;
判斷當前是“上下”或“左右”方向:由于某個點尋找目標點時,我引進了行走方向,這樣可以節(jié)省一半的計算量。例如:如果當前方向是“上下”,直線找不到時,下一步遞歸對直線上的每個點的尋找,就只需要“左右”方向,不需要上下;
路徑記錄的列表。
以上是基本思路。
我的算法優(yōu)化方法很簡單,就是在原來基礎上加上一個對應于所有點的數(shù)組,用來記錄對應的點在第多少連的情況下仍然沒有找到目標點。例如:假設總共只能
n
連,當前點已經(jīng)被記錄到經(jīng)過
x
連仍然找不到目標點,這時,如果繼續(xù)遞歸到第
n-x+1
連又來到該點,這時只剩下
x-1
連可以遞歸,而當前點已經(jīng)記錄過
x
連都無法到達,所以接下來的遞歸可以忽略。
這樣,大大減少了無效的計算,原來在第
6
連最壞情況下算了
40
多秒得到無解,現(xiàn)在可以在
20
連最壞情況下計算
2
秒得到無解。
那個n連看的算法當時用一天寫出來,非常興奮。無奈電腦是內(nèi)網(wǎng),要保密,不能把代碼直接傳出來,之前想過有時間要貼出來,一直忘記了。現(xiàn)在在轉到這個新開的blog。
只貼算法有關部分。用的是python語言:
1
class
CY_LianlianKan(
..):
2
def
__init__
(self):
3
self.m_Array
=
[]
#
存儲內(nèi)容的矩陣
4
self.m_LinkCount
=
0
#
需要連的總數(shù)
5
self.m_FirstPosition
=-
1
#
記下連的第一點
6
self.MaxWidth
=
13
#
矩陣寬
7
self.MaxHeight
=
12
#
矩陣高
8
#
其它初始化內(nèi)容
9
#
----------------------------------
10
def
IsTargetXYValid(self,X,Y):
11
#
目標坐標是否有效,超過矩陣寬高即無效
12
#
----------------------------------
13
def
IsTargetXYBlank(self,X,Y):
14
#
目標是否空白可以通過
15
#
----------------------------------
16
def
GetArrayXY(self,X,Y):
17
#
獲取矩陣坐標為XY的內(nèi)容
18
#
----------------------------------
19
def
IsLineable(self,x1,y1,x2,y2,direction):
#
判斷兩點是否可以通過某方向直線連接
20
#
方向direction:1←2→3↑4↓
21
if
direction
==
1
:
22
if
y1
==
y2
and
x1
>
x2:
23
for
i
in
xrange(x2,x1
+
1
):
24
if
self.GetArrayXY(i,y1)
>
0:
25
return
False
26
return
True
27
elif
direction
==
2
:
28
if
y1
==
y2
and
x1
<
x2:
29
for
i
in
xrange(x1,x2
+
1
):
30
if
self.GetArrayXY(i,y1)
>
0:
31
return
False
32
return
True
33
elif
direction
==
3
:
34
if
x1
==
x2
and
y1
<
y2:
35
for
i
in
xrange(y1,y2
+
1
):
36
if
self.GetArrayXY(x1,i)
>
0:
37
return
False
38
return
True
39
elif
direction
==
4
:
40
if
x1
==
x2
and
y2
<
y1:
41
for
i
in
xrange(y2,y1
+
1
):
42
if
self.GetArrayXY(x1,i)
>
0:
43
return
False
44
return
True
45
return
False
46
#
---------------------------------------
47
def
IsNTurnReachable(self,x1,y1,x2,y2,path,n,LRorUD,hasReachPoint):
48
#
path成功時用于記錄路徑 n當前剩下的連數(shù) LRorUD當前方向是上下還是左右
49
#
hasReachPoint 一個矩陣,用于記錄矩陣中各個點目前已經(jīng)經(jīng)過多少連了還找不到目標點
50
if
n
<=
0:
51
return
False
52
if
LRorUD:
#
左右方向
53
for
x
in
xrange(x1
-
1
,
-
1
,
-
1
):
#
向左
54
if
self.GetArrayXY(x,y1)
==
0
and
hasReachPoint[y1
*
self.MaxWidth
+
x]
<
n:
55
if
self.IsLineable(x,y1,x2,y2,
3
)
or
self.IsLinable(x,y1,x2,y2,
4
):
56
path
+=
[x,y1,x2,y2]
57
return
path
58
else
:
#
到達不了,上下轉彎,遞歸
59
hasReachPoint[y1
*
self.MaxWidth
+
x]
+=
1
60
p
=
self.IsNTurnReachable(x,y1,x2,y2,path
+
[x,y1],n
-
1
,False,hasReachPoint)
61
if
p
!=
False:
62
return
p
63
else
:
64
break
65
for
x
in
xrange(x1
+
1
,self.MaxWidth):
#
向右
66
if
self.GetArrayXY(x,y1)
==
0
and
hasReachPoint[y1
*
self.MaxWidth
+
x]
<
n:
67
if
self.IsLineable(x,y1,x2,y2,
3
)
or
self.IsLineable(x,y1,x2,y2,
4
):
68
path
+=
[x,y1,x2,y2]
69
return
path
70
else
:
#
到達不了,上下轉彎,遞歸
71
hasReachPoint[y1
*
self.MaxWidth
+
x]
+=
1
72
p
=
self.IsNTurnReachable(x,y1,x2,y2,path
+
[x,y1],n
-
1
,False,hasReachPoint)
73
if
p
!=
False:
74
return
p
75
else
:
76
break
77
else
:
#
上下移動
78
for
y
in
xrange(y1
-
1
,
-
1
,
-
1
):
#
向上
79
if
self.GetArrayXY(x1,y)
==
0
and
hasReachPoint[y
*
self.MaxWidth
+
x1]
<
n:
80
if
self.IsLineable(x1,y,x2,y2,
1
)
or
self.IsLineable(x1,y,x2,y2,
2
):
81
path
+=
[x1,y,x2,y2]
82
return
path
83
else
:
#
到達不了,左右轉彎,遞歸
84
hasReachPoint[y
*
self.MaxWidth
+
x1]
+=
1
85
p
=
self.IsNTurnReachable(x1,y,x2,y2,path
+
[x1,y],n
-
1
,True,hasReachPoint)
86
if
p
!=
False:
87
return
p
88
else
:
89
break
90
for
y
in
xrange(y1
+
1
,self.MaxHeight):
#
向下
91
if
self.GetArrayXY(x1,y)
==
0
and
hasReachPoint[y
*
self.MaxWidth
+
x1]
<
n:
92
if
self.IsLineable(x1,y,x2,y2,
1
)
or
self.IsLineable(x1,y,x2,y2,
2
):
93
path
+=
[x1,y,x2,y2]
94
return
path
95
else
:
#
到達不了,左右轉彎,遞歸
96
hasReachPoint[y
*
self.MaxWidth
+
x1]
+=
1
97
p
=
self.IsNTurnReachable(x1,y,x2,y2,path
+
[x1,y],n
-
1
,True,hasReachPoint)
98
if
p
!=
False:
99
return
p
100
else
:
101
break
102
return
False
103
#
--------------------------------------------------------
104
def
IsLinkAble(self,x1,y1,x2,y2,n):
#
n連看的計算函數(shù)
105
if
n
<=
0:
106
return
False
107
hasReachPoint
=
[0]
*
(self.MaxWidth
*
self.MaxHeight)
108
for
i
in
[0,
1
,
2
,
3
]:
109
if
self.isLineable(x1,y1,x2,y2,i):
110
path
=
[x1,y1,x2,y2]
111
return
path
112
path
=
[x1,y1]
113
p
=
self.IsNTurnReachalbe(x1,y1,x2,y2,path,n
-
1
,False,hasReachPoint)
114
if
p:
115
return
p
116
p
=
self.IsNTurnReachalbe(x1,y1,x2,y2,path,n
-
1
,True,hasReachPoint)
117
if
p:
118
return
p
119
return
False
當然,現(xiàn)在想到還有可以繼續(xù)優(yōu)化的地方,例如尋路時,從起點和目標點同時出發(fā)尋路,而不是只從一個點出發(fā)尋路。這樣做或許還可以雙線程優(yōu)化,不過具體做法就沒有細想了。
posted on 2009-06-28 19:50
陳昱(CY)
閱讀(1622)
評論(2)
編輯
收藏
引用
所屬分類:
算法
FeedBack:
#
re: 以前寫的一個N連看 2009-06-29 23:15
小卒
我最近想寫個立體數(shù)獨,不過理論功底不行……
回復
更多評論
#
re: 以前寫的一個N連看
2009-06-30 09:34
CY
那還要先證明立體數(shù)獨需要用多少個候選數(shù)
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關文章:
某人水題一道
shader的小奏鳴曲
一個想法,實習n維立方體!!! (結束)
一個想法,實現(xiàn)n維超級立方體!!!初步成功!!!(第二章)
一個想法,用程序畫出高維超立方體在三維上的投影!!!(1)
以前寫的一個N連看
網(wǎng)站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright ©2025 陳昱(CY) Powered by:
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
蜜乳av另类精品一区二区
|
亚洲蜜桃精久久久久久久
|
亚洲黑丝一区二区
|
亚洲福利在线视频
|
亚洲日韩欧美一区二区在线
|
亚洲激情电影中文字幕
|
亚洲免费精品
|
午夜精品影院在线观看
|
久久不见久久见免费视频1
|
久久午夜视频
|
亚洲精品一二
|
亚洲欧美在线免费观看
|
久久免费观看视频
|
欧美18av
|
国产麻豆综合
|
亚洲日韩欧美视频
|
久久精品72免费观看
|
亚洲第一天堂无码专区
|
一区二区三区欧美成人
|
久久xxxx
|
欧美日韩精品
|
在线观看日韩www视频免费
|
在线综合亚洲欧美在线视频
|
久久激情视频
|
亚洲精品视频啊美女在线直播
|
欧美一进一出视频
|
欧美日韩国产页
|
亚洲国产成人av
|
久久se精品一区精品二区
|
亚洲精品免费网站
|
麻豆91精品91久久久的内涵
|
国产欧美一区二区精品秋霞影院
|
亚洲欧美怡红院
|
欧美高清视频一区二区
|
国产一区二区
|
午夜国产精品影院在线观看
|
亚洲激情视频在线播放
|
久久久久国内
|
国产亚洲一本大道中文在线
|
亚洲视频一区二区在线观看
|
亚洲国产成人av在线
|
久久久久久欧美
|
国产视频在线观看一区二区
|
国产精品久久久免费
|
亚洲精品一区二区三区99
|
久久久夜夜夜
|
中国日韩欧美久久久久久久久
|
久久综合中文
|
悠悠资源网久久精品
|
久久综合九色欧美综合狠狠
|
欧美一区二区三区啪啪
|
在线观看91久久久久久
|
久久超碰97中文字幕
|
亚洲综合视频1区
|
国产精品日韩
|
欧美亚洲综合在线
|
亚洲欧美中文日韩在线
|
国产农村妇女毛片精品久久莱园子
|
亚洲欧美日韩国产精品
|
欧美伦理91i
|
日韩手机在线导航
|
亚洲国产专区校园欧美
|
欧美日韩国产在线播放
|
亚洲视频一区在线
|
亚洲一区二区三区精品动漫
|
国产精品亚洲激情
|
久久久久久亚洲精品杨幂换脸
|
羞羞漫画18久久大片
|
亚洲午夜精品久久久久久app
|
国产精品观看
|
久久女同精品一区二区
|
久久综合狠狠综合久久综合88
|
亚洲欧洲日本一区二区三区
|
亚洲欧洲一区二区三区久久
|
欧美小视频在线观看
|
久久国产夜色精品鲁鲁99
|
欧美在线视频一区二区三区
|
亚洲国产精品一区
|
一本一道久久综合狠狠老精东影业
|
久久久亚洲一区
|
老巨人导航500精品
|
99精品免费视频
|
香蕉av777xxx色综合一区
|
黄色一区三区
|
日韩亚洲欧美成人
|
国产一区二区三区久久悠悠色av
|
欧美成人首页
|
国产精品色一区二区三区
|
久热国产精品
|
欧美性猛交xxxx乱大交退制版
|
久久久久久9
|
欧美日韩成人一区二区三区
|
亚洲尤物精选
|
国产精品wwwwww
|
久久久久久穴
|
欧美日韩视频在线一区二区观看视频
|
亚洲深夜福利
|
免费欧美网站
|
久久国产日本精品
|
欧美日本韩国在线
|
巨乳诱惑日韩免费av
|
欧美私人网站
|
亚洲电影免费在线
|
国产一区二区三区久久悠悠色av
|
亚洲三级电影全部在线观看高清
|
国产综合久久
|
亚洲在线中文字幕
|
aa日韩免费精品视频一
|
久久久久国产一区二区三区
|
亚洲欧美中文日韩在线
|
欧美精选在线
|
欧美黄色一区二区
|
国产一区二区三区高清播放
|
一本色道久久加勒比88综合
|
亚洲欧洲精品一区二区精品久久久
|
午夜国产精品视频
|
亚洲欧美日韩区
|
欧美伦理91
|
亚洲欧洲日韩综合二区
|
在线精品在线
|
久久久精品2019中文字幕神马
|
欧美在线观看视频
|
国产精品羞羞答答xxdd
|
亚洲午夜激情
|
先锋影音网一区二区
|
欧美日韩一区二区三区在线观看免
|
亚洲大片av
|
91久久精品国产
|
免费视频一区二区三区在线观看
|
毛片一区二区三区
|
一区三区视频
|
卡一卡二国产精品
|
欧美黄色精品
|
一级日韩一区在线观看
|
欧美久久久久久
|
一区二区三区黄色
|
午夜久久久久久久久久一区二区
|
国产精品毛片
|
小黄鸭精品aⅴ导航网站入口
|
欧美在线观看视频一区二区
|
国产亚洲欧美日韩在线一区
|
久久av资源网站
|
蜜臀av性久久久久蜜臀aⅴ
|
在线欧美电影
|
欧美精品一区二区蜜臀亚洲
|
亚洲精品综合精品自拍
|
日韩午夜在线
|
国产精品豆花视频
|
性欧美超级视频
|
欧美成人a视频
|
一区二区高清在线
|
国产欧美日韩麻豆91
|
久久精品系列
|
亚洲精品资源
|
欧美制服丝袜第一页
|
亚洲国产成人久久综合
|
欧美日韩国产一区精品一区
|
亚洲一线二线三线久久久
|
久久天天躁狠狠躁夜夜av
|
亚洲欧洲日韩综合二区
|
欧美一区二区三区免费观看
|
国产精品外国
|
久久久久88色偷偷免费
|
亚洲黄色高清
|
欧美一区2区三区4区公司二百
|
国产亚洲一区二区三区
|
蜜臀av一级做a爰片久久
|
这里只有精品丝袜
|
欧美成人dvd在线视频
|
亚洲欧美国产精品桃花
|
亚洲国产欧美日韩另类综合
|
国产精品国产三级国产
|
久久麻豆一区二区
|
一区二区高清视频在线观看
|
久久躁日日躁aaaaxxxx
|
亚洲天堂久久
|
亚洲人成网站在线播
|
国产午夜精品久久久
|
欧美日产国产成人免费图片
|
久久精品一区二区三区四区
|
99在线|亚洲一区二区
|
蜜臀av在线播放一区二区三区
|
亚洲午夜在线观看
|
亚洲精品日韩综合观看成人91
|
国产欧美一区二区色老头
|
欧美日韩成人在线播放
|
美女主播精品视频一二三四
|
亚洲欧美电影在线观看
|
亚洲精品视频二区
|
亚洲国产成人精品久久
|
美女视频一区免费观看
|
久久av在线
|
午夜精品一区二区三区在线视
|
一本大道久久a久久精二百
|
亚洲第一精品夜夜躁人人躁
|
国产亚洲欧美日韩一区二区
|
国产精品永久免费观看
|
欧美性猛交视频
|
欧美午夜在线一二页
|
欧美视频中文字幕
|